1

Exposition:

We use a program built in MS Access that I serve via Terminal Services. I just installed a new TS Server with a Quad Core 2.6GHz Xeon, 8GB RAM, and 4 SATA drives in a RAID 0. In installed Server 2008 R2 (64bit obviously). It's only role is TS.

The problem:

With just a few sessions (under 10), I start getting frequent Not Responding messages in each session. When it happens, the users aren't doing anything particularly taxing, just form navigation and simple insert queries.

I can live with some stalls, but it is visually jarring in WS08 because the screen goes gray, and it presents a dialog offering to wait or close with some other options.

Questions:

  1. Any suggestions for improving performance and reducing hangs?
  2. Is it possible to disable the dialog (always wait) and screen graying?
jonfhancock
  • 236
  • 2
  • 6
  • Where is the application running? A network share, or off the terminal server? Is the database individual, so there's a database for each user session running or a shared application with several users hitting the database back end? – Bart Silverstrim Jan 07 '10 at 17:29
  • 1
    What is it that goes "not responding" - is it the Access app, or the TS session? Since you say that it goes gray, I'm guessing it's the TS session itself. If that's the case, you may have a server or network problem, independent of the Access application. When it hangs, is it for all sessions at the same time, or just some users? – mfinni Jan 07 '10 at 17:41
  • RAID-0? Really? Not a great idea for availability. – Evan Anderson Jan 07 '10 at 17:44
  • @Evan Anderson I'm not concerned with availability on that machine, I'm concerned with performance. It is backed up multiple times daily, and I have a failover machine waiting. – jonfhancock Jan 07 '10 at 17:59
  • @mfinni It is the App that is not responding. It hangs for each session independently. – jonfhancock Jan 07 '10 at 17:59
  • @Bart Silverstrim All files are located on the terminal server. Each user launches a separate front-end db, that links to a single backend db. Currently, it is just an mdb file, but we will be moving to MSSQL soon. – jonfhancock Jan 07 '10 at 18:01
  • You need to hire someone with Access expertise to analyze the app and figure out why it's such a pig. FWIW, I've deployed quite a few Access apps on WTS and never seen anything of the sort, but then, I've been developing Access apps professionally for over 15 years, so I know a bit about how to do it right. If this was a homegrown app, not so much of that likely happened in the building of the app. – David W. Fenton Aug 30 '10 at 19:56
  • We have the same problem, with a new machine. We've been developing Access apps professionally for over 10 years. Bevore there was an Dual Core and now there a XEON E5620. The old one is too slow and the new don't work well. Do You found something or migrate to an SQL-Server Backend? – Summer-Time Dec 18 '11 at 13:55

1 Answers1

2

Sounds like you need some basic performance analysis, for starts, to see where you're bottlenecking. The numbers you get from this chart will give you a really gross idea of where to start looking for your performance problems.

I'd fire up Performance Monitor (Start / perfmon), navgate to the "Performance Monitor" node, and using the "+" icon in the tool bar, add the following counters to the chart:

  • Memory - Pages / sec - This is going to show memory paging activity that contributes to poor perfomance (it can also show paging activity that has nothing to do with poor performance, as well). If you're seeing high paging then you may be bottlenecking on RAM capacity. This may also manifest itself as a disk bottleneck (because of reads / writes to the paging file), so be wary.

  • Physical Disk - Avg. Disk Queue Length - Choose the instance that corresponds to the drive where the Access database file is located (assuming they're on the local disk of the server computer) - This number should be no greater than 2 x the number of spindles in the RAID volume as a very, very general rule of thumb. You can dive deeper into disk counters if it looks like you're having a disk bottleneck.

  • Network Interface - Bytes Total / sec - Choose the instance that corresponds to the NIC that clients are accessing the server through. If the Access database file is hosted on a network share, add an instance for the NIC that the server uses to access that network share (assuming it isn't the same NIC that clients are accessing the share through). - This is going to give you a gross number of the bytes / sec moving on the network interface. You can use a very load testing tool, WSTTCP, to gauge the maximum bandwidth utilization between the server and a client computer. Compare that number to this number.

Perfmon will add a "% Processor Time" counter for the "total" of all processors in the machine automatically. I'd remove it and add the a Processor - % Processor Time counter for each processor instance in the machine, individually. Microsoft Access is primarily single-threaded, and if you're begging a single processor instance the "_Total" % Processor Time counter may only show 25% (or 12.5% if you have hyper-threading on your processor).

That covers the potential bottlenecks - disk, RAM, network, and CPU. You can use that chart to get a feel for gross performance of the box. Then you can start drilling into specific bottlenecks and getting a feel for the culprit.

A Customer of mine deployed a "little Access app" that they'd been using around their office for a couple of years onto a Terminal Server running Windows Server 2008 and were shocked at how poorly it performed. It "ran fine" on desktop machines, and they expected it to be the same on the Terminal Server. It turned out that they were max'ing out all the RAM on the Terminal Server very quickly when users opened the application up simultaneously. It wasn't a big deal for the database to open on one of their desktop machines w/ 1 or 2GB of RAM, but 15 people trying to share it on the Terminal Server was too much. (The database had large PDF files stored as OLE objects inside it, if you can believe it... Unbelievable but true. The MDB file was over 300MB...)

As an aside: RAID 0? On a server? You're multiplying your odds of failure by using RAID-0, since it has "zero" redundancy. If you're looking or high performance you'd be better off using RAID-10 and sacraficing some disk space in the name of reliability. I can't imagine you need the raw IO performance of RAID-0 on a Terminal Server machine running Microsoft Office-type applications.

Evan Anderson
  • 141,071
  • 19
  • 191
  • 328
  • Physical Disk - Avg. Disk Queue Length ++ This is a biggie on Citrix servers with GUI interactive users. A big recommendation, if you find this problem, is to get a RAID card with a battery-backed write cache (and use it.) – mfinni Jan 07 '10 at 18:47
  • I've set up perfmon with the counters you suggested. I had a meeting during crunch time for the server. I'll monitor it tomorrow and see what I come up with. – jonfhancock Jan 08 '10 at 06:16