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.
- Kumulativ oppdatering 1 for SQL Server 2014 SP1
- Kumulativ oppdatering 5 for SQL Server 2012 SP2
- Kumulativ oppdatering 6 for SQL Server 2014
- Kumulativ oppdatering 14 for SQL Server 2012 SP1
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:
- Den nyeste kumulative oppdateringen for SQL Server 2014 SP1
- Den nyeste kumulative oppdateringen for SQL Server 2012 SP2
- Den nyeste kumulative oppdateringen for SQL Server 2014
- Den nyeste kumulative oppdateringen for SQL Server 2012 SP1
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».