You are currently offline, waiting for your internet to reconnect

FIX: Slow performance occurs in SQL Server 2008 R2 or in SQL Server 2012 if high CPU usage is observed with contention over the QUERY_EXEC_STATS spinlock

Microsoft distributes Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) or Microsoft SQL Server 2012 fixes in one downloadable file. Because the fixes are cumulative, each new release contains all the hotfixes and all the security updates that were included with the previous SQL Server 2008 R2 Service Pack 1 (SP1) or Microsoft SQL Server 2012 update release.
Symptoms
Consider the following scenario:
  • You install an instance of Microsoft SQL Server 2008 R2 or Microsoft SQL Server 2012 on a computer.
  • Concurrent statements that resemble the following are executed in the instance:
    CREATE PROC p AS RETURN (
    query
    ); EXEC p;
    Or, you run a query that contains the following code:

    IF EXISTS(
    subquery
    );
  • The CPU usage is consistently high, and the work threads are in runnable state.
  • The contention for the QUERY_EXEC_STATS spinlock is high.
    For example, the spin count, the possible collisions, and the back-off values for the QUERY_EXEC_STATS spinlock increase quickly.
    Note For more information about how to monitor the QUERY_EXEC_STATS spinlock, see the "More information" section.

In this scenario, slow performance might occur.

Cause
This issue because occurs SQL Server 2008 R2 or SQL Server 2012 creates and destroys some memory structures about global statistics instead of caching them. This causes a performance bottleneck.
Resolution

Cumulative update information

SQL Server 2012

The fix for this issue was first released in Cumulative Update 1 for SQL Server 2012. For more information about this cumulative update package, click the following article number to view the article in the Microsoft Knowledge Base:
2679368 Cumulative update package 1 for SQL Server 2012
Note Because the builds are cumulative, each new fix release contains all the hotfixes and all the security fixes that were included with the previous SQL Server 2012 fix release. Microsoft recommends that you consider applying the most recent fix release that contains this hotfix. For more information, click the following article number to view the article in the Microsoft Knowledge Base:
2692828 The SQL Server 2012 builds that were released after SQL Server 2012 was released
You must apply a SQL Server 2012 hotfix to an installation of SQL Server 2012.

Cumulative update package 5 for SQL Server 2008 R2 SP1

The fix for this issue was first released in Cumulative Update 5. For more information about how to obtain this cumulative update package for SQL Server 2008 R2 SP1, click the following article number to view the article in the Microsoft Knowledge Base:
2659694 Cumulative update package 5 for SQL Server 2008 R2 SP1
Note Because the builds are cumulative, each new fix release contains all the hotfixes and all the security fixes that were included with the previous SQL Server 2008 R2 SP1 fix release. We recommend that you consider applying the most recent fix release that contains this hotfix. For more information, click the following article number to view the article in the Microsoft Knowledge Base:
2567616 The SQL Server 2008 R2 builds that were released after SQL Server 2008 R2 SP1 was released
More information
To monitor the QUERY_EXEC_STATS spinlock, adjust the delay and number of iterations as appropriate for your environment in the following code, and then run it:

SET NOCOUNT ONCREATE TABLE #spins([Spinlock Name] varchar(50),Collisions numeric,Spins numeric,[Spins/Collision] float,[Sleep Time (ms)] numeric,Backoffs numeric, InsertTime datetime DEFAULT GETDATE())DECLARE @counter int = 1WHILE @counter < 10      BEGIN            INSERT INTO #spins ([Spinlock Name], Collisions, Spins, [Spins/Collision], [Sleep Time (ms)], Backoffs) EXECUTE ('DBCC SQLPERF (''SPINLOCKSTATS'') WITH NO_INFOMSGS')            WAITFOR DELAY '00:00:05'            SET @counter +=1      ENDSELECT * FROM #spins WHERE [Spinlock Name] = 'QUERY_EXEC_STATS' ORDER BY InsertTimeDROP TABLE #spins

Status
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.
Properties

Article ID: 2662301 - Last Review: 11/19/2012 16:07:00 - Revision: 5.0

Microsoft SQL Server 2008 R2 Datacenter, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Standard

  • kbtshoot kbqfe kbfix kbexpertiseadvanced kbsurveynew KB2662301
Feedback
=">