CACHESTORE_SQLCP SQL-Pläne belegen nach einigen Tagen mehr als 38 GB.
Wir haben bereits die Option "Für Ad-hoc-Workloads optimieren" aktiviert. (Entity Framework und benutzerdefinierte Berichterstellung verursachen viele Ad-hocs!)
SQL Server 2016 SE 3.00.2164.0.v1 unter AWS RDS mit Multi-AZ-Spiegelung
Wenn ich renne:
DBCC FREESYSTEMCACHE('SQL Plans');
oder
DBCC FREEPROCCACHE
oder
DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL
oder
DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;
Es scheint nicht klar zu sein:
SELECT TOP 1 type, name, pages_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb desc
type name pages_kb
CACHESTORE_SQLCP SQL Plans 38321048
Ich habe mit aktiviertem Abfragespeicher ausgeführt, ihn jedoch deaktiviert, um festzustellen, ob dies eine Störung darstellt. Es schien nicht zu helfen, aber ich habe ihn deaktiviert.
Was wirklich komisch ist, ist auch
SELECT COUNT(*) FROM sys.dm_exec_cached_plans
ist 1-3 oder so (es scheint immer nur laufende Abfragen anzuzeigen), obwohl der gesamte Speicher reserviert ist, noch bevor ich versucht habe, etwas zu löschen. Was vermisse ich?
CACHESTORE_SQLCP belegt mehr als 60% des gesamten verfügbaren Arbeitsspeichers. Dies ist besorgniserregend, da gelegentlich Wartezeiten auftreten. Darüber hinaus mussten wir über das Wochenende eine Routine-DBCC CHECKDB beenden, die 4 Stunden dauerte, da nicht genügend Speicher aufstapelte (bei aktivierter Option PHYSICAL_ONLY wurde der Vorgang sofort fehlerfrei abgeschlossen).
Gibt es eine Möglichkeit, diesen Speicher zurückzugewinnen (außer nächtlichen Neustarts !?)?
Update von Kommentaren / Antworten
Wenn ich renne
SELECT * FROM sys.fn_my_permissions(NULL,NULL)
Ich bekomme
entity_name subentity_name permission_name
server CONNECT SQL
server CREATE ANY DATABASE
server ALTER ANY LOGIN
server ALTER ANY LINKED SERVER
server ALTER ANY CONNECTION
server ALTER TRACE
server VIEW ANY DATABASE
server VIEW ANY DEFINITION
server VIEW SERVER STATE
server ALTER SERVER STATE
server CREATE SERVER ROLE
server ALTER ANY SERVER ROLE
Welches beinhaltet die erforderliche ALTER SERVER STATE
Erlaubnis.
Die Ausgabe von DBCC FREEPROCCACHE
ist
DBCC-Ausführung abgeschlossen. Wenn DBCC Fehlermeldungen ausgibt, wenden Sie sich an Ihren Systemadministrator.
Welches ist die Standardnachricht. Andere DBCC-Funktionen, die RDS nicht unterstützt, geben Fehlermeldungen zu Berechtigungen aus.
(Einen Tag später und nachdem SQL Plans erneut ausgeführt wurde, sind es immer noch 38.321.280 KB.)
Update von Kommentaren / Antworten
SELECT pool_id, name, cache_memory_kb, compile_memory_kb FROM sys.dm_resource_governor_resource_pools
Ausgänge:
pool_id name cache_memory_kb compile_memory_kb
1 internal 38368408 1168080
DBCC FREEPROCCACHE ('internal')
macht nichts anders
Aktualisieren
Das SQL-Fehlerprotokoll protokolliert jedes Mal Folgendes:
2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'SQL Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Bound Trees' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
Aktualisieren
Auf RDS ist ein Upgrade der Engine-Version von 13.00.2164.0.v1 auf 13.00.4422.0.v1 verfügbar. Obwohl das Auto-Minor-Upgrade aktiviert ist, scheint es uns nicht auf dem neuesten Stand zu halten. Wird neu starten und dieses Wochenende installieren, um zu sehen, ob es hilft.