Friday, August 23, 2013

CRM 2011 Performance Settings

REGISTRY

Disable Loopback check
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
           New DWORD Value: DisableLoopbackCheck = 1 (Decimal)

CRM Settings
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM
          New DWORD Value: OLEDBTimeout = 86400 (Decimal)
          New DWORD Value: ExtendedTimeout = 1000000 (Decimal)
          New DWORD Value: NormalTimeout = 300000 (Decimal)
          New DWORD Value: AsyncRemoveCompletedWorkflows = 1 (Decimal)
          New DWORD Value: AsyncRemoveCompletedJobs = 1 (Decimal)

TCP/IP Settings
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
          New DWORD Value: MaxUserPort = 65534 (Decimal)
          New DWORD Value: TcpTimedWaitDelay = 260 (Decimal)

SQL

Max Degree of Parallelism and Other SQL Settings
exec sp_configure 'show adv', 1;
RECONFIGURE WITH OVERRIDE;
--reduces locking by ensureing queries are only run against a single processor
exec sp_configure 'max degree', 1;
RECONFIGURE WITH OVERRIDE;
--reduces ASYNC_NETWORK_IO locks that occur 
--when large queries hog all the memory on a machine
--and the machine can no longer access the IO.
--The value of this setting should be modified based 
--upon the amount of ram on your machine.
exec sp_configure 'max server memory', 8192;
RECONFIGURE WITH OVERRIDE;
--Enable SQL CLR which can increase timezone conversion
--on advanced find
exec sp_configure 'clr enabled', '1';
RECONFIGURE WITH OVERRIDE;
exec sp_configure;

Read Snapshot Isolation

How to check to see if it’s already turned on:
SELECT name, is_read_committed_snapshot_on FROM sys.databases

How to turn it on for a specific database:
DECLARE @DBNAME VARCHAR(100);
SET @DBNAME = 'Default_MSCRM'; --Update this based upon your database name

DECLARE @query varchar(max);
SET @query = 'ALTER DATABASE {DATABASE} SET SINGLE_USER WITH ROLLBACK IMMEDIATE;' +
'ALTER DATABASE {DATABASE} SET ALLOW_SNAPSHOT_ISOLATION ON;' +
'ALTER DATABASE {DATABASE} SET READ_COMMITTED_SNAPSHOT ON;' +
'ALTER DATABASE {DATABASE} SET MULTI_USER;'
SET @query = REPLACE(@query, '{DATABASE}', @DBNAME);
exec(@query);


SqlCommandTimeout

USE MSCRM_CONFIG
UPDATE DeploymentProperties
SET IntColumn = 9000
WHERE ColumnName = 'SqlCommandTimeout'


IIS


WCF/SOAP Compression

Open a command promp 'As Administrator' and run the following command:
%SYSTEMROOT%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/soap%u002bxml; charset=utf-8',enabled='true']" /commit:apphost


JSON Compression

Open a command promp 'As Administrator' and run the following command:
%SYSTEMROOT%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json; charset=utf-8',enabled='true']" /commit:apphost



http://blogs.msdn.com/b/crminthefield/archive/2011/12/29/enable-wcf-compression-to-improve-crm-2011-network-performance.aspx

Static Content Caching

This will help ensure that some static content files used by CRM will also be cached.  It ensures that the Response Header is not set to * but instead to Accept-Encoding.


  • Open IIS Manager
  • Click on Microsoft Dynamics CRM Website
  • Click on Configuration Editor
  • Navigate to system.web/caching/outputCache
  • Switch omitVaryStart to True and click the Apply button.

image

http://blogs.msdn.com/b/crminthefield/archive/2014/12/19/static-content-not-cached-properly-in-dynamics-crm-due-to-vary-header.aspx

Kerberos and Windows Auth

Update setting to reduce 401 responses when using Kerberos and Windows Auth at the same time. This will not hurt anything if they are only using windows auth.

- Run a command prompt As Administrator
- At the command prompt, type the following commands, and then press ENTER:

cd %SystemRoot%\System32\inetsrv
appcmd set config /section:windowsAuthentication /authPersistNonNTLM:true

http://support.microsoft.com/kb/954873