My apologies. I mis-read the entry in the Performance Monitor of the XP
Pro Windows Task Manager. Access is a PROCESS (not a service) in the list
of Processes when it is running. It seems to be only one process
regardless of the number of Access Programs (actually activities in fully
different Access Databases and actually different Access versions) I
activate.
It is absolutely critical for this discussion to make a distinction between
access the development system, and the database engine you use with MS
access. Remember you can build an access application and use oracle for your
database or SQL server, or in this case the jet database engine. Once again
I will restate this issue:
It is absolutely critical that in your discussions you make a distinction
between the two products. We don't call c++ a database. MS access is NOT the
data engine here. Access is a tool that lets you develop reports and write
and create software just like VB. This is not to be confused with the jet
database engine.
On dual core processors which I have tested, I can have different access
databases running as different versions of Access
You can also freely have several copies of the same edition of MS access
running. And, you can open the same application several times if you wish.
There is no particular restrictions in this regards. Just launch ms-access
3 times. Then open the same mdb application ...you have 3 copies of it
running. You don't need to use different versions of ms-access to make this
happen. I suppose that this point I could point out that like word, or
excel, MS access also has what we call re-entrant code. This simply means
if you open in internet explore 5 times, or launch word ten times, you
actually only have one copy of the code base in RAM, but separate memory is
used for the variables in code. only one copy of that code ever gets brought
into memory. I suspect this has some significance in how the windows
scheduler decides which CPU to run a given task on.
, and each of the different databases each on it's own disk drive
I don't think the issue of separate disk drives will make a difference from
a CPU processing point of view (But it might get the operating system can
request data from those drives as assynchronously.)
However, using one processor or ten processors is not going to be affected
by the number of disk drives you have. As I said before this whole issue is
moot on the issue of processors anyway. I said MS access applications have
not been processing bound for about ten years now. (they are i/o bound).
, and when I look at the Performance
monitor of the XP Pro Task Manager (it has two CPU lines on Dual Core
'chines, but only one on single core), I see one CPU pegged at 100% and
the other one sits at or near zero, as if Access running multiple tasks,
using different versions, and having multiple disks just ignores the
second processor.
As I said, I don't think the application is processing bound. If you want to
see MS access use both processor at 100%, then try the following simple
experiment:
Build a simple unbound form with a button behind it that runs a blank loop
to about 1 billion. Put in some timer code to give you the amount of time it
takes to do this task.
eg:
Private Sub Command0_Click()
Dim t As Double ' timer
Dim i As Long
t = Timer
For i = 1 To 1000000000
Next i
t = Timer - t
MsgBox "loop done, time = " & t
End Sub
Now, close the application (and access). Now launch one copy of MS access
(note I said MS access, not open your application). Now launch a second copy
of MS access. now in each copy of ms-access open the above application, and
open up the form with the above code. Now resize and place the two
applications side by side on the screen in which also you can see the
performance CPU monitor.
Click on the button and note how one CPU goes to 100%. (note the time). Now,
click on the other application and you'll see it go to hundred percent also.
Now, run both at the same time...you see BOTH cup's pegged at 100%. As you
can clearly see who we now have two access applications running on both
processors at 100%, And it's the same application, and were running them
both on separate processors.
Of course the above demonstration is a little bit a waste of your time, as
I've mentioned about a zillion times so far it's not a MS access we're
talking about it's your application and JET.
It's going be your website system that controls how well and how many
processes it launches as separate threads to read data from that jet
database. If your website's not intelligent enough to launch a separate
threads and separate copies of code, then you'll not see improvements
concurrency at all with additional processing. It is ****your****
application that decides this issue, since jet runs as part of that
application.
In parallel, I have looked at the comparative SQL Server specs. The
"express" version is stated to support only one processor, the "workgroup"
version will support 2 processors, the "standard" 4 processors, and the
"enterprise" supports unlimited processors.
The "express" edition only supports one processor, but it can run requests
asynchronously. That ability is worth a few processors alone. However, since
your application can't use the processor separately, then you have to split
out the database engine to something that can.
As I clearly shown, ms-access can run two copies on two processors. If you
can't get your web based system to do that, then you have to choose a
database engine that can do it for you.
Obviously, with planning for SQL Server, we need to select at least the
"Workgroup" version to reach the second processor.
As I said I my bets that you're not processing bound at all on the database
engine side anyway. Further if you used SQL server you can place it on a
separate machine and effectively double your processing at that point (Since
then the processing would not be shared with the website, but on a different
machine). It is an issue of the architecture and what kind of throughput you
get as opposed to the actual processing issue. You're dealing here with much
as a i/o and bandwidth issue as you are processing.
So Albert, I much appreciate your input. It would be extremely helpful to
know how to get Access to use the second processor of a dual core system.
I have been totally unsuccessful so far.
As I showed above that simple demonstration it's a piece of cake to get
access to use both processors. It is your web a software that you'll have to
get to use both processors, not JET. ms-access had no problem using both
processors when you run two copies.
You'll not see the jet database in the task manager. The reason is because
when you're using jet it's like it's become part of the actual application
you're using. It becomes like a simple subroutine in part of the application
code. Were talking about a library reference to code here, and running some
code. WE ARE NOT TALKING about a SEPARATE process that runs and communicates
with that program. I think this make things more clear.
The jet engine runs *as* part of the processing thread of the application
that is **using** jet. This is not an inter process communication issue like
when you use sql server. It is simply a program running and using the JET
code as part of that process.
If it used the processors beyond the first one, we would never consider
switching.
As I mentioned I disagree 100% that the issue of processing will fix any of
these problems.
Help if you can to tell me why I can't get the second processor to look at
Access programs. It would be greatly appreciated.
As I said it's a piece of cake to have two copies of ms-access running. The
problem is you're not running MS access in this case. It is your web site
code that has to know to launch separate copies of its code, or separate
threads to utilize the processor(s). If your web code can't run as multiple
threads, then you going have change your code to a threaded model. You can
also consider using a database engine that can run as threaded and thus
utilize multiple processors (like sql server). However, using a database
engine that can utilize multiple processors will NOT solve the lack of your
web code's ability to run as multiple threads. Your web code will simply que
up requests, and run on a single processor no matter what you do *unless*
your web system can utilize multiple threads. I suppose using a threaded
database engine like sql server will at least speed up the database part,
but your web requests part will still be stuck on that one processor.