473,398 Members | 2,368 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,398 software developers and data experts.

ADO.net + MS Access = performance issues

Hi,

I have a recursive application that walks through a directory structure on a
Hard Drive and writes various file information to a single table in an
Access 2003 database. I am opening a connection to the database at the
start of a worker thread that does all of the work. The connection is
closed when the worker thread completes. I am using a single method to
write a bunch of information to the table.

The application flies initially. However, when there are approximately
500,000 rows in the database, performance begins to decrease exponentially.
After about 800,000 or 900,000 rows, the program is only writing about 2/3
rows per second. If I stop the process and create a new Access DB, the
performance issues disappear until about 500,000 rows are reached again.
Usually the database size is around 150 mb at that time. Interestingly
enough, restarting the application without a new database does not improve
the performance.

Is this just the nature of Access? I am thinking about writing to a new
table once I pass 500,000 rows, or should I create a entirely new database?
Or is there an Access performance tweak for my issue?

Unfortunately, MSDE or SQL is not an option, since I need the app to be
highly portable.

Thanks,

Dmitry
Feb 7 '06 #1
8 1687
Have you tried to split the data into multiple tables? You could then
create a union query to join all of the data in one view. Maybe limit each
table to 100,000 rows, or even less...

If that doesn't work then split the data into multiple Access DB's using
multiple tables.

SQL Server would be a much better solution, to bad it isn't just a single
file like Access...
"Dmitry Akselrod" <dm****@nospam.com> wrote in message
news:-o********************@comcast.com...
Hi,

I have a recursive application that walks through a directory structure on
a Hard Drive and writes various file information to a single table in an
Access 2003 database. I am opening a connection to the database at the
start of a worker thread that does all of the work. The connection is
closed when the worker thread completes. I am using a single method to
write a bunch of information to the table.

The application flies initially. However, when there are approximately
500,000 rows in the database, performance begins to decrease
exponentially. After about 800,000 or 900,000 rows, the program is only
writing about 2/3 rows per second. If I stop the process and create a new
Access DB, the performance issues disappear until about 500,000 rows are
reached again. Usually the database size is around 150 mb at that time.
Interestingly enough, restarting the application without a new database
does not improve the performance.

Is this just the nature of Access? I am thinking about writing to a new
table once I pass 500,000 rows, or should I create a entirely new
database? Or is there an Access performance tweak for my issue?

Unfortunately, MSDE or SQL is not an option, since I need the app to be
highly portable.

Thanks,

Dmitry

Feb 7 '06 #2
Brooke,
SQL Server would be a much better solution, to bad it isn't just a single
file like Access...

SQLExpress can be used like that.

http://msdn2.microsoft.com/library(d.../ms239722.aspx

AFAIK can this as well be done in the connectionstring

Cor

Feb 7 '06 #3
If an instance of sql server ( MSDE / SQL Express ) it can be used like
that
however the portable issue is probably exactly that ( installing an
instance of SQL )
it would be better if there was an embedded version ( a version that does
not need an install at all )

regards

Michel Posseth

"Cor Ligthert [MVP]" <no************@planet.nl> wrote in message
news:Oa**************@TK2MSFTNGP11.phx.gbl...
Brooke,
SQL Server would be a much better solution, to bad it isn't just a single
file like Access...

SQLExpress can be used like that.

http://msdn2.microsoft.com/library(d.../ms239722.aspx

AFAIK can this as well be done in the connectionstring

Cor

Feb 7 '06 #4
Hi,

Maybe doing a repair on the mdb every couple of 100000 records
will help. I know the repair process is not that quick but it will reduce
the size of the database and reindex it.

http://www.knowdotnet.com/articles/compactmdb.html

Ken
-------------
"Dmitry Akselrod" <dm****@nospam.com> wrote in message
news:-o********************@comcast.com...
Hi,

I have a recursive application that walks through a directory structure on
a Hard Drive and writes various file information to a single table in an
Access 2003 database. I am opening a connection to the database at the
start of a worker thread that does all of the work. The connection is
closed when the worker thread completes. I am using a single method to
write a bunch of information to the table.

The application flies initially. However, when there are approximately
500,000 rows in the database, performance begins to decrease
exponentially. After about 800,000 or 900,000 rows, the program is only
writing about 2/3 rows per second. If I stop the process and create a new
Access DB, the performance issues disappear until about 500,000 rows are
reached again. Usually the database size is around 150 mb at that time.
Interestingly enough, restarting the application without a new database
does not improve the performance.

Is this just the nature of Access? I am thinking about writing to a new
table once I pass 500,000 rows, or should I create a entirely new
database? Or is there an Access performance tweak for my issue?

Unfortunately, MSDE or SQL is not an option, since I need the app to be
highly portable.

Thanks,

Dmitry

Feb 7 '06 #5
MS Access is a toy - you need a real database. Even Foxpro would be
better, and it operates like a database file rather than a database server.

Tom

Dmitry Akselrod wrote:
Hi,

I have a recursive application that walks through a directory structure on a
Hard Drive and writes various file information to a single table in an
Access 2003 database. I am opening a connection to the database at the
start of a worker thread that does all of the work. The connection is
closed when the worker thread completes. I am using a single method to
write a bunch of information to the table.

The application flies initially. However, when there are approximately
500,000 rows in the database, performance begins to decrease exponentially.
After about 800,000 or 900,000 rows, the program is only writing about 2/3
rows per second. If I stop the process and create a new Access DB, the
performance issues disappear until about 500,000 rows are reached again.
Usually the database size is around 150 mb at that time. Interestingly
enough, restarting the application without a new database does not improve
the performance.

Is this just the nature of Access? I am thinking about writing to a new
table once I pass 500,000 rows, or should I create a entirely new database?
Or is there an Access performance tweak for my issue?

Unfortunately, MSDE or SQL is not an option, since I need the app to be
highly portable.

Thanks,

Dmitry

Feb 7 '06 #6
Not sure how you are inserting the records but you may be better off creating
a dataset using the dataadaptor then adding the records to the dataset then
using the update method to actually update the database.
--
Dennis in Houston
"Dmitry Akselrod" wrote:
Hi,

I have a recursive application that walks through a directory structure on a
Hard Drive and writes various file information to a single table in an
Access 2003 database. I am opening a connection to the database at the
start of a worker thread that does all of the work. The connection is
closed when the worker thread completes. I am using a single method to
write a bunch of information to the table.

The application flies initially. However, when there are approximately
500,000 rows in the database, performance begins to decrease exponentially.
After about 800,000 or 900,000 rows, the program is only writing about 2/3
rows per second. If I stop the process and create a new Access DB, the
performance issues disappear until about 500,000 rows are reached again.
Usually the database size is around 150 mb at that time. Interestingly
enough, restarting the application without a new database does not improve
the performance.

Is this just the nature of Access? I am thinking about writing to a new
table once I pass 500,000 rows, or should I create a entirely new database?
Or is there an Access performance tweak for my issue?

Unfortunately, MSDE or SQL is not an option, since I need the app to be
highly portable.

Thanks,

Dmitry

Feb 8 '06 #7
On Mon, 6 Feb 2006 22:05:41 -0500, "Dmitry Akselrod" <dm****@nospam.com> wrote:

¤ Hi,
¤
¤ I have a recursive application that walks through a directory structure on a
¤ Hard Drive and writes various file information to a single table in an
¤ Access 2003 database. I am opening a connection to the database at the
¤ start of a worker thread that does all of the work. The connection is
¤ closed when the worker thread completes. I am using a single method to
¤ write a bunch of information to the table.
¤
¤ The application flies initially. However, when there are approximately
¤ 500,000 rows in the database, performance begins to decrease exponentially.
¤ After about 800,000 or 900,000 rows, the program is only writing about 2/3
¤ rows per second. If I stop the process and create a new Access DB, the
¤ performance issues disappear until about 500,000 rows are reached again.
¤ Usually the database size is around 150 mb at that time. Interestingly
¤ enough, restarting the application without a new database does not improve
¤ the performance.
¤
¤ Is this just the nature of Access? I am thinking about writing to a new
¤ table once I pass 500,000 rows, or should I create a entirely new database?
¤ Or is there an Access performance tweak for my issue?
¤
¤ Unfortunately, MSDE or SQL is not an option, since I need the app to be
¤ highly portable.

You may want to try compacting the database if you haven't recently done so. I don't see 150 mb as a
big issue at this point. The max size for an Access database is 2 gb.

There could be other issues, such as the use of an index and/or primary key.
Paul
~~~~
Microsoft MVP (Visual Basic)
Feb 9 '06 #8
On Mon, 6 Feb 2006 22:24:37 -0600, "Brooke" <tb******@hotmail.com> wrote:

¤ Have you tried to split the data into multiple tables? You could then
¤ create a union query to join all of the data in one view. Maybe limit each
¤ table to 100,000 rows, or even less...
¤
¤ If that doesn't work then split the data into multiple Access DB's using
¤ multiple tables.
¤
¤ SQL Server would be a much better solution, to bad it isn't just a single
¤ file like Access...

It wouldn't be a *better* solution because it lacks portability (as he requires).
Paul
~~~~
Microsoft MVP (Visual Basic)
Feb 9 '06 #9

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

20
by: John | last post by:
Hi, I've recently upgraded from Access 97 to Access 2002 & the performance basically stinks. I have tried the following items listed below but it has only had a minor impact: 1) Upgraded Jet...
9
by: Rob | last post by:
Scenario: O/S: Win XP Professional Back-end: Access 2002 on network server I have an Access 97 application, in production on our network, that takes appoximately 5 minutes to process monthly...
92
by: Jeffrey P via AccessMonster.com | last post by:
Our IT guys are on a vendetta against MS Access (and Lotus Notes but they've won that fight). What I can't understand is, what's the problem? Why does IT hate MS Access so much. I have tried...
24
by: Bob Alston | last post by:
Most of my Access database implementations have been fairly small in terms of data volume and number of concurrent users. So far I haven't had performance issues to worry about. <knock on wood> ...
17
by: DaveG | last post by:
Hi all I am planning on writing a stock and accounts program for the family business, I understand this is likely to take close to 2 years to accomplish. The stock is likely to run into over a...
8
by: Dmitry Akselrod | last post by:
Hi, I have a recursive application that walks through a directory structure on a Hard Drive and writes various file information to a single table in an Access 2003 database. I am opening a...
2
by: egoldthwait | last post by:
I need to convert a 17mb access 2000 db to Oracle and house it in a Citrix farm. The issue: we have never converted an Access Db to Oracle but can probably use Oracle's Workbench to assist with...
6
by: onnodb | last post by:
Hi all, While working on an Access UI to a MySQL database (which should be a reasonable, low-cost, flexible interface to the DB, better than web-based, much less costly than a full-fledged .NET...
10
by: Arno R | last post by:
Hi all, So I bought a new laptop 10 days ago to test my apps with Vista. (home premium) Apparently Office 2007 is pre-installed. (a time limited but complete test version, no SP1) So I take the...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.