Sintomi
Quando si verifica un numero eccessivo di inserimenti simultanei nello stesso bucket hash o se la cache del piano di SQL Server ad hoc raggiunge il limite di immissione di 160.036, si verifica una contesa grave su SOS_CACHESTORE blocco di selezione. In questa situazione, si verifica un utilizzo elevato della CPU in Microsoft SQL Server.
Causa
Il problema si verifica quando la cache del piano SQL Server raggiunge il limite di immissione e i piani con costi ridotti devono essere sfrattati per poter inserire nuovi piani. Ciò causa pesanti contese per il blocco di selezione SOS_CACHESTORE che fornisce la sincronizzazione per i bucket di tabelle hash della cache del piano SQL Server.
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 aggiornamenti rapidi e tutte le correzioni per la sicurezza inclusi nell'aggiornamento cumulativo precedente. Scopri gli aggiornamenti cumulativi più recenti per SQL Server:
Ulteriori informazioni
La cache dei piani ha due limiti: le dimensioni totali e il numero totale di tutti i piani. I limiti per dimensioni e numero di voci sono descritti nel white paper seguente:
Pianificare gli interni della cache
Il numero massimo di voci che una cache dei piani può contenere è quattro volte il numero di bucket. È possibile 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' )
Nei sistemi a 64 bit, ad esempio, il numero di bucket per la cache dei piani di SQL Server è 40.009. Di conseguenza, il numero massimo di voci che possono rientrare nella cache del piano di SQL Server è 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 utilizzando il flag di traccia di avvio "-T 174", il numero di bucket viene aumentato a 160.001 nei sistemi a 64 bit. La cache dei piani può contenere un massimo di 640.004 piani.
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".