Sintomas
Quando muitas inserções simultâneas ocorrem no mesmo hash de hash ou o cache ad hoc de plano do SQL Server atinge seu limite de entrada de 160.036, ocorre uma séria disputa em SOS_CACHESTORE o SpinLock ocorre. Nessa situação, um alto uso da CPU ocorre no Microsoft SQL Server.
Causa
O problema ocorre quando o cache de plano do SQL Server atinge seu limite de entrada, e os planos que têm baixo custo devem ser removidos para inserir novos planos. Isso causa uma disputa excessiva para o SOS_CACHESTORE SpinLock que fornece sincronização para os buckets da tabela de hash do cache de plano do SQL Server.
Resolução
Informações de atualização cumulativa
O problema foi corrigido primeiro na atualização cumulativa a seguir do SQL Server.
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes do SQL Server:
Informações adicionais
O cache de 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:
Planejar a parte interna do cache
O número máximo de entradas que um cache de plano pode suportar é quatro vezes 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 do cache de plano do SQL Server é 40.009. Portanto, o número máximo de entradas que podem caber dentro do cache de planos do SQL Server é 160.036.
Se você tiver uma carga de trabalho que usa consultas ad hoc diferentes, esse limite pode se tornar um afunilamento. A alteração feita por esse hotfix corrige 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 Bucket aumentou para 160.001 em sistemas de 64 bits. Em seguida, o cache de plano pode conter 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".