KB2662301-FIX: le prestazioni lente si verificano in SQL Server 2008 R2 o in SQL Server 2012 se l'utilizzo elevato della CPU viene osservato con il conflitto sul QUERY_EXEC_STATS spinlock

Microsoft distribuisce le correzioni di Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) o Microsoft SQL Server 2012 in un unico file scaricabile. Poiché le correzioni sono cumulative, ogni nuova versione contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nella versione precedente di SQL Server 2008 R2 Service Pack 1 (SP1) o Microsoft SQL Server 2012 Update Release.

Sintomi

Considerare lo scenario descritto di seguito:

  • Si installa un'istanza di Microsoft SQL Server 2008 R2 o Microsoft SQL Server 2012 in un computer.

  • Le istruzioni simultanee simili alle seguenti vengono eseguite nell'istanza:

    CREATE PROC p AS RETURN (
    query
    ); EXEC p;

    In alternativa, è possibile eseguire una query contenente il codice seguente:

    IF EXISTS(
    subquery
    );
  • L'utilizzo della CPU è sempre elevato e i thread di lavoro sono in stato eseguibile.

  • Il conflitto per il QUERY_EXEC_STATS SpinLock è elevato. Ad esempio, il conteggio delle spine, le possibili collisioni e i valori di back-off per il QUERY_EXEC_STATS spinlock aumentano rapidamente.Nota Per altre informazioni su come monitorare la QUERY_EXEC_STATS SpinLock, vedere la sezione "altre informazioni".

In questo scenario si potrebbero verificare prestazioni lente.

Causa

Questo problema si verifica perché SQL Server 2008 R2 o SQL Server 2012 crea e distrugge alcune strutture di memoria sulle statistiche globali anziché memorizzarle nella cache. Questo causa un collo di bottiglia delle prestazioni.

Risoluzione

Informazioni sull'aggiornamento cumulativo

SQL Server 2012

La correzione di questo problema è stata rilasciata per la prima volta in aggiornamento cumulativo 1 per SQL Server 2012. Per altre informazioni su questo pacchetto di aggiornamento cumulativo, fare clic sul numero dell'articolo della Microsoft Knowledge Base seguente per visualizzare l'articolo:

2679368 Pacchetto di aggiornamento cumulativo 1 per SQL Server 2012Nota Poiché le build sono cumulative, ogni nuova versione di correzione contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nella versione precedente di SQL Server 2012 FIX. Microsoft consiglia di applicare l'ultima versione di correzione che contiene questo hotfix. Per ulteriori informazioni, fare clic sul numero dell'articolo seguente per visualizzare l'articolo nella Microsoft Knowledge Base:

2692828 Build di SQL Server 2012 rilasciate dopo il rilascio di SQL Server 2012 È necessario applicare un hotfix di SQL Server 2012 a un'installazione di SQL Server 2012.

Pacchetto di aggiornamento cumulativo 5 per SQL Server 2008 R2 SP1

La correzione di questo problema è stata rilasciata per la prima volta in aggiornamento cumulativo 5. Per altre informazioni su come ottenere questo pacchetto di aggiornamento cumulativo per SQL Server 2008 R2 SP1, fare clic sul numero dell'articolo seguente per visualizzare l'articolo della Microsoft Knowledge Base:

2659694 Pacchetto di aggiornamento cumulativo 5 per SQL Server 2008 R2 SP1Nota Poiché le compilazioni sono cumulative, ogni nuova versione di correzione contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nella versione precedente di SQL Server 2008 R2 SP1 FIX. Ti consigliamo di considerare l'applicazione della versione di correzione più recente che contiene questo hotfix. Per ulteriori informazioni, fare clic sul numero dell'articolo seguente per visualizzare l'articolo nella Microsoft Knowledge Base:

2567616 Build di SQL Server 2008 R2 rilasciate dopo il rilascio di SQL Server 2008 R2 SP1

Ulteriori informazioni

Per monitorare l' QUERY_EXEC_STATS SpinLock, regolare il ritardo e il numero di iterazioni come appropriato per l'ambiente nel codice seguente e quindi eseguirlo:

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

Stato

Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".

Serve aiuto?

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa a Microsoft Insider

Queste informazioni sono risultate utili?

Grazie per il feedback!

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×