Sintomas
Depois de instalar o SQL Server 2014 Service Pack 1 (SP1), SQL Server 2012 SP3 ou SQL Server 2016, verifica-se um desempenho de consulta lento e uma utilização elevada da CPU em modo privilegiado (kernel) até o servidor ser reiniciado. Também poderá ver um elevado volume de espera PAGELATCH_*.
Resolução
O problema foi corrigido nas seguintes atualizações cumulativas do SQL Server:
- Atualização cumulativa 2 para SQL Server 2016
- Atualização cumulativa 5 para SQL Server 2012 Service Pack 3 (SP3)
- Atualização cumulativa 7 para SQL Server 2014 SP1
Recomendação: Instale a atualização cumulativa mais recente para o SQL Server
Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com a atualização cumulativa anterior. Recomendamos que transfira e instale as atualizações cumulativas mais recentes para SQL Server:
- Atualização cumulativa mais recente para o SQL Server 2016
- Atualização cumulativa mais recente para o SQL Server 2012 SP3
- Atualização cumulativa mais recente para o SQL Server 2014 SP1
Causa
SQL Server usa promoção de trava dinâmica e lógica de rebaixamento (super/sub-latch). Isso melhora o desempenho e a escalabilidade do SQL Server controlando o número de aquisições em uma trava e quanto tempo deve levar para adquirir a mesma trava se não houver contenção de trava. Em seguida, as travas elegíveis são promovidas (super-trava) com base nesse modelo. Quando há muitas alterações (inserções/atualizações/exclusões) em um Heap ou BTree (HoBT), as travas associadas ao HoBT podem ser promovidas ao status de super trava. No entanto, o rebaixamento não ocorre automaticamente. Você pode ler mais sobre super/sub-travamento neste artigo.
Se esses HoBTs forem posteriormente transferidos, o HoBT liberado voltará para um cache global para reutilização. Quando esse HOBT é reutilizado, ele reutiliza a trava promovida anteriormente, mesmo quando não há disputa sobre o HoBT. Isso adiciona sobrecarga da CPU. Esse comportamento aumenta o uso da CPU de modo privilegiado (kernel) de SQL Server até que o servidor seja reiniciado. Esse aumento normalmente não adiciona mais do que vários microssegundos a cada execução. Você também pode ver um alto volume de esperas PAGELATCH_* por causa dessas supertravas estendidas em HoBTs.
Estado
A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".