Microsoft SQL 2008 R2 / Exchange 2010 Memory Conflict
Closed     Case # 10041     Affiliated Job:  BaBaDou DOT Com
Opened:  Monday, September 13, 2010     Closed:  Monday, September 13, 2010
Total Hit Count:  12339     Last Hit:  Friday, April 19, 2024 9:06:20 AM
Unique Hit Count:  4456     Last Unique Hit:  Friday, April 19, 2024 9:06:20 AM
Case Type(s):  Development, Server
Case Notes(s):  All cases are posted for review purposes only. Any implementations should be performed at your own risk.

Problem:
After an upgrade of Microsoft SQL 2005 to Microsoft SQL 2008 R2, web sites were not responding well - multiple time outs were occurring. The development/educational/test server hosting the SQL instance also hosts: Microsoft Windows 2008, Microsoft Exchange 2010, Routing and Remote Access serving SSTP VPN site to site tunnels, IIS web sites etc. therefore, my troubleshooting originally made me think there might be a SSL port conflict since I had just setup the SSTP RRAS service while also operating websites hosting the SSL port.

Resolution:
After further review, by stopping the RRAS service, I continued to receive the time out errors - by extending the connection parameters:
     -    conn.ConnectionTimeout = 600
     -    conn.CommandTimeout = 300
This resolved the timeout errors; however, I started to see additional error information indicating the SQL server did not have sufficient memory to process the query. The Exchange Information Store for both Exchange 2007 & 2010 reserve a large chunk of memory even if it does not need this memory. It is supposed to free up memory as requirements of other applications request it. This appears to be an issue for the SQL service when it processes an intensive query and requires the memory at a moment's notice.

Apparently, after the upgrade, the settings I put into place on the SQL server did not stick. these settings set a minimum pool of memory for the SQL server - going to the server properties through the Management Studio, selecting "Memory" and enabling the "Use AWE to allocate memory" option as well as setting a "Minimum server memory (in MB): to a value large enough to reserve memory for the SQL services resolved my issue.

Additionally, since I believe Exchange is nothing more than a SQL server optimized for hosting mailboxes, I figured these same settings could be set on the Exchange server, but the opposite, to set a maximum pool of memory reserved for the service. I came across this article [http://www.msexchange.org/pages/newsletters/july2007.asp] indicating the same. By using the ADSI editor, you can set both a Maximum as well as Minimum value - the settings are:
     -    Configuration > Services > Microsoft Exchange > Exchange organization > Administrative Groups > Your administrative group > Servers > Server name > Information Store
     -    Goto the "Information Store" properties
     -    Edit "msExchESEParamCacheSizeMax"
     -    Set a value using 8 kilobyte pages (2007) or 32 kilobyte pages (2010)
          o    i.e. for 2007 1GB cache equates to 1,048,576 (1024 * 1024). Next, divide this by 8kb to determine the value to enter; therefore, 1,048,576 / 8 = 131,072
          o    i.e. for 2010 1GB cache equates to 1,048,576 (1024 * 1024). Next, divide this by 32kb to determine the value to enter; therefore, 1,048,576 / 32 = 32,768

I am performing all these actions on a single server which I am hosting multiple systems; it is generally not recommended to put restrictions on the memory utilized by these two systems; however, if you have multiple SQL instances or a similar situation hosting multiple services on a single server, this may be helpful in managing the memory on the system.



Profile IMG: Footer Left Profile IMG: Footer Right