KB3026083 – LØSNING: SOS_CACHESTORE spinlock-konflikt i ad hoc-SQL Server planbuffer fører til høy CPU-bruk i SQL Server

Gjelder for
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

Symptomer

Når for mange samtidige innsettinger forekommer i samme hash-samling, eller ad hoc-SQL Server planhurtigbufferen når inngangsgrensen på 160 036, oppstår det alvorlige konflikter på SOS_CACHESTORE spinlock. I denne situasjonen oppstår det et høyt CPU-bruk i Microsoft SQL Server.

Årsak

Problemet oppstår når bufferen for SQL Server-abonnementer når inngangsgrensen, og planer med lave kostnader må utestenges for å sette inn nye planer. Dette fører til stor strid for SOS_CACHESTORE spinlock som gir synkronisering for hash-tabellsamlingene i SQL Server planbufferen.

Oppløsning

Informasjon om kumulativ oppdatering

Problemet ble først løst i den følgende kumulative oppdateringen av SQL Server.

Om kumulative oppdateringer for SQL Server

Hver nye kumulative oppdatering for SQL Server inneholder alle hurtigreparasjoner og alle sikkerhetsrettinger som fulgte med den forrige kumulative oppdateringen. Ta en titt på de nyeste kumulative oppdateringene for SQL Server:

Mer informasjon

Planbufferen har to begrensninger: Den totale størrelsen og det totale antallet av alle planene. Størrelse og grenser for antall bidrag er forklart i følgende hvitbok:

Planlegg interne hurtigbufferfunksjoner

Maksimalt antall oppføringer som en planhurtigbuffer kan holde, er fire ganger antall samlinger. Du kan kontrollere denne informasjonen ved å kjøre følgende spørringer:


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' )

På 64-biters systemer er for eksempel antall samlinger for bufferen for SQL Server-planen 40 009. Derfor er maksimalt antall oppføringer som får plass i hurtigbufferen for SQL Server-abonnement, 160 036.

Hvis du har en arbeidsbelastning som bruker ulike ad hoc-spørringer, kan denne grensen bli en flaskehals. Endringen som gjøres med denne hurtigreparasjonen, løser dette problemet. Når du har installert denne hurtigreparasjonen og aktivert endringen ved hjelp av oppstartssporingsflagget -T 174, økes antall samlinger til 160 001 på 64-biters systemer. Planhurtigbufferen kan deretter inneholde maksimalt 640 004 planer.

Status

Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen «Gjelder for».