Hi, David.
However, when the app was unsplit I ran it from a network drive and it ran
very quickly. After I split the database, with exactly the same code, it
ran very slowly from the same network drive. This leads me to believe it's
the split and not my design.
I deployed my first split application one night after work, and the very
first thing the next morning my phone was ringing off the hook. "What did
you DO?!! PUT IT BACK!!! PLEASE!!!" The speed was totally unacceptable.
I hadn't changed any code whatsoever, and the database application was in
the same exact location, with the same name. I had a whole bumper crop of
design mistakes to learn from that morning. I committed most of the
mistakes I listed in my first reply, although some of them were out of my
control, such as the deeply buried path and non-DOS 8.3 path and file name
convention. Everyone wants to blame the network for this slow performance,
but it's mostly due to the fact that the database application was designed
for a single-user, non-split database. When these applications are deployed
into a multiuser environment, the design flaws _really_ become evident by
the slow performance.
My tables are keyed and normalized with no manually added indexes to keyed
columns.
Good. Do you also have indexes on every column that includes ID, Code, or
Key in the name? The default is to assign an index to each of these
columns, even if there's already an index on them from the primary key or
hidden index on the referenced columns in a foreign key constraint. The
extra, unnecessary indexes can slow down your database application.
But, as I said before, the unsplit app worked fine from a network drive.
A lot of the design flaws are hidden until the database application is
split.
My fe is in My Documents.
The standard path to My Documents is C:\Documents and Settings\<User
Name>\My Documents, so that's going to be a slow path, because the operating
system has to call the API function for long file names to resolve the name
on each of those directories, in addition to calling the network API
function to check whether the user has permission to read each of the
directories in the path to the file.
Don't know what "DOS 8.3 naming convention" means. I created folders and
gave them names. So what is this naming convention and how can I use it to
speed up performance?
In the days of DOS, directories and file names couldn't exceed eight
characters, and they could only use up to three characters for the
extension. Also, only alphanumeric characters and the underscore character
could be used. Windows supports long file names, but it uses a slow Windows
API function to resolve the name if it doesn't conform to the DOS 8.3
standard. So, if any of the directories in the path contain a space
character, you'll have to wait for the Windows API function to be called to
figure out the real name of the directory. If you use camel case and a
reasonably short name, a human will still be able to read the name, and your
operating system won't have to call extra API functions, which slow down
file access.
If you think of anything else, please pass it on to me.
Ensure that your antivirus software isn't scanning for MDB files. And that
goes for MDE and MDA files, too. Use optimistic record locking ("No
Locks"), not pessimistic record locking, for the default record locking
database option and the forms. Use the row level locking database option,
not page level locking. This is set by the first user to open a connection
to the back end, so ensure that all users have this setting, because if the
first user opens the back end database with page level locking, all the
other users who subsequently connect will be using page level locking until
the database if finally exited by all users and the LDB file is deleted.
And ensure that each user has a copy of the front end on his own
workstation, not a shared front end file on the network.
HTH.
Gunny
See
http://www.QBuilt.com for all your database needs.
See
http://www.Access.QBuilt.com for Microsoft Access tips and tutorials.
Blogs:
www.DataDevilDog.BlogSpot.com,
www.DatabaseTips.BlogSpot.com
http://www.Access.QBuilt.com/html/expert_contributors2.html for contact
info.