Friday, March 30, 2007

Memory Managment in SQL Server

For quite a while, we have had a problem with our main instance of SQL server not using all the memory available to it on the server. We have finally found out what the problem was thanks to this article -

The scenario is we have a clustered instance of SQL, that can run on one of 3 identically spec'd server running Windows2003 Enterprise, SQL 2000 Enterprise and with 16gig of ram.

The sqlsvr process had only been running at about 3gig of memory, and was causing us some performance issues on busy days. We had found some articles about changing boot.ini that told windows to use the extra memory, but it didn't seam to help. Here are the steps:

  1. Open up boot.ini (its normally hidden but lives in the root of c:\)
  2. At the end of the line for the OS you boot to, add /3GB /PAE. This basicly tells Windows 2003 that it and SQL server have access to more than 4gig of Ram, and they can use it
  3. Next you have to set the 'awe enable' option of SQL server to 1. This enables the API in SQL server and give it access to the extra memory
  4. Open up SQL query analyser, and type:
    sp_configure 'awe enabled', 1
    Reconfigure with overide
  5. When you have done this, restart the server. When you bring it back up, SQL server should have access to all the memory available in the system. You can now tell SQL server how much memory to use in the servers properties, but you now have to specify a a specific amount and not a range.
Also something else I found while doing this, the port that a clustered instance of SQL runs on is 1267, the port it runs on when not clustered is 1433.

No comments: