Improving Project Server 2007 Performance

Well I have just been a little irritable all day, and I guess the 1:40 load time for the Project Web Access (PWA) page was the straw that broke the camel's back. I dedicated all day to trying to figure out why our Project server was so darn slow for whoever first accessed it.

PROBLEM:

The first person to try to load any particular site on our PWA server has to wait close to 2 minutes.

More specifically, the first person to load any particular site after the application pool's worker process has been started (an IIS Application Pool setting).

Just to clarify, all subsequent page loads from a site are pretty quick.

ENVIRONMENT:

Our configuration consists of a few workstations on our LAN connecting to a single tower loaded with:

Windows Server 2003 R2
Enterprise x64 Edition
Service Pack 2

Intel® Celeron® CPU
E3200 @ 2.40GHz
3.39 GHz, 3.93 GB of RAM

SQL Server 2008
SharePoint 2007
Project Server 2007

TANGENT/VENTING:

I could find all kinds of documentation on how to configure farms for better efficiency and how to add a bazillion hard drives to improve performance (essentially one hard drive per conceivable task: 1 for the OS, 1 for the page file, 1 for log writes, 1 for content read/writes, etc.). I cannot afford at this time the hardware improvements that are recommended, and frankly I'm kind of skeptical about their necessity. I don't understand how we got to the point where I can load up Lego Indiana Jones on the Wii in less time than it took for my desktop to essentially serve up some HTML. Hell, my web browser can parse and render that HTML in a fraction of a percent of the time it took for my server to deliver it. Clearly my server is doing more than it needs to be doing probably because it is optimized for something other than serving a small group of computers on a LAN a few easily modified web pages. It's too bad I'm not an expert on SharePoint server administration.

NOT A SOLUTION:

I saw several posts like this that recommended fixing a problem with regards to "loading signed assemblies the .net Framework checks the Internet based Certificate Revocation List." I tried the solutions that looked practical enough (changing the registry for every conceivable user account is not practicle), and nothing there worked for me.

I also saw this, but editing the web.config didn't solve my problem either.

SOLUTION:

Well lucky for me I found a solution – more like a hack: It does not solve the problem, it just makes it so that you don't see the problem anymore (probably).

http://spwakeup.codeplex.com/

SPWakeup will traverse your PWA server to load up every site on it. This way every site should be cached and ready to go.

My strategery for accomplishing this was to determine what time of day the IIS Application Pool's worker process would recycle, and just set that app to run some time after that. To determine when the worker process recycles follow these steps:

  1. Start->Administrative Tools->Internet Information Services (IIS) Manager
  2. Expand SERVERNAME (local computer)
  3. Expand Web Site
    1. Right click the name of the website (for me is was Project Web Access)
    2. Click Properties
    3. Click the Home Directory tab
    4. Cake a note of the Application Pool setting at the bottom.
    5. Click Cancel to get out of there.
  4. Expand Application Pools
    1. Right click the name of the application pool found back in the Home Directory tab
    2. Click Properties
    3. Make a note of the time of day that the worker process is recycled. On my system, I have it set to Recycle worker processes at the following times: 02:49.
    4. Click Cancel to get out of there.
  5. Close Internet Information Service (IIS) Manager.

Now I have SPWakeup3.exe sitting in my server's Task Scheduler set to run every day roughly an hour after the worker process recycles. My initial page loads are down to around 10-15 seconds now.

So, thank you to Jason Samuel for tipping me off to SPWakeUp.

If anyone has any other performance improvement tips, let me know.