KB3026083 – OPRAVA: SOS_CACHESTORE spor spinlockov v ad hoc SQL Server vyrovnávacej pamäti plánov spôsobuje vysoké využitie procesora v SQL Server

Vzťahuje sa na
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Web - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer SQL Server 2017 Enterprise SQL Server 2017 Enterprise Core

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.

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:

Ďalšie informácie

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.