KB2662301-CORRECção: o desempenho lento ocorre no SQL Server 2008 R2 ou no SQL Server 2012 se o uso de CPU for observado com contenção no QUERY_EXEC_STATS SpinLock

A Microsoft distribui o Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) ou o Microsoft SQL Server 2012 correções em um arquivo que pode ser baixado. Como as correções são cumulativas, cada nova versão contém todos os hotfixes e todas as atualizações de segurança que foram incluídas na versão anterior do SQL Server 2008 R2 Service Pack 1 (SP1) ou do Microsoft SQL Server 2012 atualização.

Sintomas

Considere o seguinte cenário:

  • Você instala uma instância do Microsoft SQL Server 2008 R2 ou do Microsoft SQL Server 2012 em um computador.

  • Instruções simultâneas que são semelhantes às seguintes são executadas na instância:

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

    Ou você executa uma consulta que contém o seguinte código:

    IF EXISTS(
    subquery
    );
  • O uso da CPU é consistentemente alto, e os threads de trabalho estão em estado executável.

  • A disputa pelo QUERY_EXEC_STATS SpinLock é alta. Por exemplo, o número de rotação, as possíveis colisões e os valores de back-off para o QUERY_EXEC_STATS SpinLock aumentam rapidamente.Observação Para obter mais informações sobre como monitorar o QUERY_EXEC_STATS SpinLock, consulte a seção "mais informações".

Nesse cenário, pode ocorrer desempenho lento.

Causa

Esse problema ocorre porque o SQL Server 2008 R2 ou o SQL Server 2012 cria e destrói algumas estruturas de memória sobre as estatísticas globais em vez de cache-las. Isso causa um afunilamento de desempenho.

Resolução

Informações sobre a atualização cumulativa

SQL Server 2012

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 1 para SQL Server 2012. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

2679368 Pacote de atualização cumulativa 1 para SQL Server 2012Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2012 Fix. A Microsoft recomenda que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:

2692828 As compilações do SQL Server 2012 lançadas após o lançamento do SQL Server 2012 Você deve aplicar um hotfix do SQL Server 2012 a uma instalação do SQL Server 2012.

Pacote de atualizações cumulativas 5 para SQL Server 2008 R2 SP1

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 5. Para obter mais informações sobre como obter este pacote de atualização cumulativa do SQL Server 2008 R2 SP1, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

2659694 Pacote de atualizações cumulativas 5 para SQL Server 2008 R2 SP1Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2008 R2 SP1. Recomendamos que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:

2567616 As compilações do SQL Server 2008 R2 que foram lançadas após a liberação do SQL Server 2008 R2 SP1

Informações adicionais

Para monitorar o QUERY_EXEC_STATS SpinLock, ajuste o atraso e o número de iterações conforme apropriado para o seu ambiente no código a seguir e, em seguida, execute-o:

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

A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Estas informações foram úteis?

Obrigado por seus comentários!

×