Plany CACHESTORE_SQLCP Sql zajmują> 38 GB po kilku dniach.
Już działamy z opcją „optymalizuj pod kątem obciążeń ad hoc”. (Entity Framework i niestandardowe raporty tworzą wiele ad hoców!)
SQL Server 2016 SE 3.00.2164.0.v1 na AWS RDS z funkcją kopii lustrzanej wielu serwerów AZ
Kiedy biegnę:
DBCC FREESYSTEMCACHE('SQL Plans');
lub
DBCC FREEPROCCACHE
lub
DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL
lub
DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;
Wydaje się, że to nie wyjaśnia:
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
Pracowałem z włączonym Query Store, ale wyłączyłem go, aby sprawdzić, czy coś w tym przeszkadza, nie pomogło, ale zrezygnowałem.
To, co jest naprawdę dziwne, również
SELECT COUNT(*) FROM sys.dm_exec_cached_plans
wynosi około 1-3 (wydaje się, że pokazuje tylko obecnie wyświetlane zapytania), mimo że cała ta pamięć jest zarezerwowana, nawet zanim spróbowałem cokolwiek wyczyścić. czego mi brakuje?
CACHESTORE_SQLCP zajmuje ponad 60% całej dostępnej pamięci, co stanowi problem, ponieważ zdarzają się okresy oczekiwania na pamięć. Ponadto musieliśmy zabić rutynową procedurę DBCC CHECKDB przez weekend, który trwał 4 godziny, ponieważ niewystarczająca pamięć układała się w stosy oczekiwania (zakończyło się natychmiast, bez błędów przy włączonym PHYSICAL_ONLY).
Czy jest jakiś sposób na odzyskanie tej pamięci (poza nocnymi restartami !?)?
Aktualizacja z komentarzy / odpowiedzi
Kiedy biegnę
SELECT * FROM sys.fn_my_permissions(NULL,NULL)
dostaję
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
Który obejmuje wymagane ALTER SERVER STATE
pozwolenie.
Dane wyjściowe DBCC FREEPROCCACHE
to
Wykonanie DBCC zakończone. Jeśli DBCC wydrukuje komunikaty o błędach, skontaktuj się z administratorem systemu.
Który jest standardowym komunikatem. Inne funkcje DBCC nieobsługiwane przez RDS dają komunikaty o błędach dotyczące uprawnień.
(Dzień później i po ponownym uruchomieniu Plany SQL nadal mają 38 321 280 kb)
Aktualizacja z komentarzy / odpowiedzi
SELECT pool_id, name, cache_memory_kb, compile_memory_kb FROM sys.dm_resource_governor_resource_pools
wyjścia:
pool_id name cache_memory_kb compile_memory_kb
1 internal 38368408 1168080
DBCC FREEPROCCACHE ('internal')
nic nie robi inaczej
Aktualizacja
Dziennik błędów SQL rejestruje za każdym razem:
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.
Aktualizacja
Dostępna jest aktualizacja wersji silnika w RDS z 13.00.2164.0.v1 do 13.00.4422.0.v1. Chociaż jest ustawiony na automatyczną aktualizację wersji mniejszej, wydaje się, że nie aktualizuje nas do najnowszej wersji. Uruchomi się ponownie i zainstaluje to w ten weekend, aby zobaczyć, czy to pomoże.