Sintomas
Quando muitas inserções simultâneas ocorrem no mesmo bucket de hash ou o cache do plano ad hoc SQL Server atinge seu limite de entrada de 160.036, ocorre uma contenção severa em SOS_CACHESTORE spinlock. Nessa situação, ocorre um alto uso de CPU no Microsoft SQL Server.
Causa
O problema ocorre quando o cache do plano SQL Server atinge seu limite de entrada e os planos que têm baixo custo devem ser despejados para inserir novos planos. Isso causa forte contenção para o SOS_CACHESTORE spinlock que fornece sincronização para os buckets de tabela de hash do cache de plano SQL Server.
Resolução
Informações cumulativas de atualização
O problema foi corrigido pela primeira vez na atualização cumulativa a seguir de SQL Server.
Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as últimas atualizações cumulativas para SQL Server:
Informações adicionais
O cache do plano tem dois limites: o tamanho total e o número total de todos os planos. Os limites de tamanho e contagem de entradas são explicados no seguinte white paper:
O número máximo de entradas que um cache de plano pode conter é quatro vezes maior que a contagem de buckets. Você pode verificar essas informações executando as seguintes consultas:
select name, type, buckets_count
from sys.dm_os_memory_cache_hash_tables
where name IN ( 'SQL Plans' , 'Object Plans' , 'Bound Trees' )
select name, type, pages_kb, entries_count
from sys.dm_os_memory_cache_counters
where name IN ( 'SQL Plans' , 'Object Plans' , 'Bound Trees' )
Por exemplo, em sistemas de 64 bits, o número de buckets para o cache do plano SQL Server é de 40.009. Portanto, o número máximo de entradas que podem se encaixar no cache do plano SQL Server é 160.036.
Se você tiver uma carga de trabalho que usa consultas ad hoc diferentes, esse limite pode se tornar um gargalo. A alteração feita por esse hotfix resolve essa situação. Depois de instalar esse hotfix e habilitar a alteração usando o sinalizador de rastreamento de inicialização "-T 174", a contagem de buckets será aumentada para 160.001 em sistemas de 64 bits. Em seguida, o cache de plano é capaz de manter um máximo de 640.004 planos.
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".