Príznaky
Keď sa v rovnakom sektore s hodnotou hash vyskytuje príliš veľa súbežných vložení alebo ad hoc vyrovnávacia pamäť SQL Server plánu dosiahne limit vstupov 160 036, vyskytne sa vážny rozpor SOS_CACHESTORE spinlockom. V tejto situácii dochádza k vysokému využitiu procesora v Microsoft SQL Server.
Príčina
Problém sa vyskytuje, keď vyrovnávacia pamäť plánov SQL Server dosiahne svoj limit vstupov, a plány, ktoré majú nízke náklady, musia byť vyradené, aby bolo možné vložiť nové plány. To spôsobuje veľké rozpory pre SOS_CACHESTORE spinlock, ktorý zabezpečuje synchronizáciu sektorov hash tabuľky vyrovnávacej pamäte plánu SQL Server.
Riešenie
Informácie o kumulatívnych aktualizáciách
Tento problém bol prvýkrát opravený v nasledujúcej kumulatívnej aktualizácii SQL Server.
- Kumulatívna aktualizácia 1 pre SQL Server 2014 SP1
- Kumulatívna aktualizácia 5 pre SQL Server 2012 SP2
- Kumulatívna aktualizácia 6 pre SQL Server 2014
- Kumulatívna aktualizácia 14 pre SQL Server 2012 SP1
Informácie o kumulatívnych aktualizáciách pre SQL Server
Každá nová kumulatívna aktualizácia pre SQL Server obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli zahrnuté v predchádzajúcej kumulatívnej aktualizácii. Pozrite si najnovšie kumulatívne aktualizácie pre SQL Server:
- Najnovšia kumulatívna aktualizácia pre SQL Server 2014 SP1
- Najnovšia kumulatívna aktualizácia pre SQL Server 2012 SP2
- Najnovšia kumulatívna aktualizácia pre SQL Server 2014
- Najnovšia kumulatívna aktualizácia pre SQL Server 2012 SP1
Vyrovnávacia pamäť plánov má dve limity: celkovú veľkosť a celkový počet všetkých plánov. Obmedzenia veľkosti a počtu položiek sú vysvetlené v nasledujúcej technickej dokumentácii:
Interné položky plánovania vyrovnávacej pamäte
Maximálny počet položiek, ktoré môže vyrovnávacia pamäť plánu obsahovať, je štvornásobok počtu sektorov. Tieto informácie môžete overiť spustením nasledujúcich dotazov:
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' )
V 64-bitových systémoch je napríklad počet sektorov pre vyrovnávaciu pamäť plánu SQL Server 40 009. Preto je maximálny počet položiek, ktoré sa zmestia do vyrovnávacej pamäte plánov SQL Server, 160 036.
Ak vaše pracovné zaťaženie používa rôzne dotazy ad hoc, tento limit sa môže stať kritickým bodom. Zmena vykonaná touto rýchlou opravou rieši túto situáciu. Keď nainštalujete túto rýchlu opravu a povolíte zmenu pomocou príznaku sledovania pri spustení "-T 174", v 64-bitových systémoch sa počet sektorov zvýši na 160 001. Vyrovnávacia pamäť plánov potom môže obsahovať maximálne 640 004 plánov.
Stav
Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.