Sintomi
Quando si verificano troppi inserimenti simultanei nello stesso bucket hash oppure la cache di SQL Server Plan ad hoc raggiunge il limite di 160.036, si verifica un conflitto grave in SOS_CACHESTORE spinlock. In questo caso, in Microsoft SQL Server si verifica un uso elevato della CPU.
Causa
Il problema si verifica quando la cache del piano di SQL Server raggiunge il limite di voce e i piani a basso costo devono essere rimossi per inserire nuovi piani. In questo modo viene provocato un conflitto pesante per il SOS_CACHESTORE spinlock che fornisce la sincronizzazione per i bucket della tabella hash della cache di SQL Server Plan.
Risoluzione
Informazioni sull'aggiornamento cumulativo
Il problema è stato risolto per la prima volta nel seguente aggiornamento cumulativo di SQL Server.
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nell'aggiornamento cumulativo precedente. Vedere gli ultimi aggiornamenti cumulativi per SQL Server:
Ulteriori informazioni
La cache del piano ha due limiti: la dimensione totale e il numero totale di tutti i piani. I limiti di dimensioni e numero di ingresso sono illustrati nel foglio bianco seguente:
Pianificare gli interni della cache
Il numero massimo di voci che una cache di piano può contenere è quattro volte il conteggio del bucket. Puoi verificare queste informazioni eseguendo le query seguenti:
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' )
Ad esempio, nei sistemi a 64 bit, il numero di contenitori per la cache di SQL Server Plan è 40.009. Il numero massimo di voci che possono essere inserite nella cache del piano di SQL Server è pertanto 160.036.
Se si ha un carico di lavoro che usa query ad hoc diverse, questo limite può diventare un collo di bottiglia. La modifica apportata da questo hotfix risolve questa situazione. Dopo aver installato questo hotfix e aver abilitato la modifica usando il contrassegno di traccia di avvio "-T 174", il conteggio dei bucket viene aumentato in 160.001 nei sistemi a 64 bit. La cache del piano può quindi contenere un massimo di piani di 640.004.
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".