We have been experiencing high levels of user disruption due to SQL timeouts accross our systems since the beginning of the year.
The SQL-Server instance in question has very high CPU usage (higher than 90% on all 16 cores all the time) during business hours.
We have also noticed very high wait times: The combination of CXPACKET & LATCH_EX accounts for about 97% of all waits. This is split about 50/50 between CXPACKET & LATCH_EX.
The non-buffered latch wait accounting for the vast majority (>95%) of LATCH_EX is ACCESS_METHODS_DATASET_PARENT.
This suggests the problem is to do with parallelism.
An example of the scale of wait times is:
CXPACKET : 332,301,799 ms LATCH_EX : 267,955,752 ms PAGEIOLATCH_SH : 2,955,160 ms
This was for the period between 08:00-16:24 on Jan 11th.
Options under consideration
1) Change MAXDOP from 0 to something between 4 and 8
2) Modify the cost threshold of parallelism from 50 to a higher number
Suggestions most welcome on how to ease the very high CPU load we are seeing, and reduce timeouts, in particular whether the proposed course of action is wise, and which numbers to change MAXDOP and cost threshold of parallellism to.
SQL-Server 2008 R2 running on AMD Opteron 6180 SE, of which 16 cores are given to this instance of SQL-Server.
Type of workload: something of the order of 800 connections at the same time during business hours; majority OLTP type workload with some OLAP mixed in.
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) ... Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1).Memory is appx 128 Gigs between 24 cores. 16 of the cores are available to this instance