Problembeschreibung
Wenn zu viele gleichzeitige Einfügungen im selben Hashbucket auftreten oder der Ad-hoc-SQL Server Plancache sein Einstiegslimit von 160.036 erreicht, kommt es zu schwerwiegenden Konflikten bei SOS_CACHESTORE Spinlock. In dieser Situation tritt eine hohe CPU-Auslastung in Microsoft SQL Server auf.
Ursache
Das Problem tritt auf, wenn der SQL Server Plancache sein Einstiegslimit erreicht und Pläne mit geringen Kosten entfernt werden müssen, um neue Pläne einfügen zu können. Dies führt zu schweren Konflikten für den SOS_CACHESTORE Spinlock, der die Synchronisierung für die Hashtabellenbuckets des SQL Server Plancaches bereitstellt.
Lösung
Informationen zu kumulativen Updates
Das Problem wurde zuerst im folgenden kumulativen Update von SQL Server behoben.
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:
Weitere Informationen
Für den Plancache gelten zwei Grenzwerte: Die Gesamtgröße und die Gesamtanzahl aller Pläne. Die Grenzwerte für Größe und Anzahl von Einträgen werden im folgenden Whitepaper erläutert:
Die maximale Anzahl von Einträgen, die ein Plancache enthalten kann, ist das Vierfache der Bucketanzahl. Sie können diese Informationen überprüfen, indem Sie die folgenden Abfragen ausführen:
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' )
Auf 64-Bit-Systemen beträgt die Anzahl der Buckets für den SQL Server Plancache beispielsweise 40.009. Daher ist die maximale Anzahl von Einträgen, die in den SQL Server Plancache passen können, 160.036.
Wenn Sie über eine Workload verfügen, die verschiedene Ad-hoc-Abfragen verwendet, kann dieser Grenzwert zu einem Engpass werden. Die Änderung, die von diesem Hotfix vorgenommen wird, behebt diese Situation. Nachdem Sie diesen Hotfix installiert und die Änderung mithilfe des Startablaufverfolgungsflags "-T 174" aktiviert haben, wird die Bucketanzahl auf 64-Bit-Systemen auf 160.001 erhöht. Der Plancache kann dann maximal 640.004 Pläne enthalten.
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.