Ani DBCC FREEPROCCACHE, ani DBCC FREESYSTEMCACHE („Plany SQL”) nie robią nic, aby zwolnić pamięć CACHESTORE_SQLCP

13

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 !?)?

Wykres zużycia pamięci Tabela zużycia pamięci

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 STATEpozwolenie.

Dane wyjściowe DBCC FREEPROCCACHEto

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.

Nazwa profesjonalnego brzmienia
źródło

Odpowiedzi:

5

Zaktualizowałem do wersji 13.00.4422.0.v1 (SQL Server 2016 SP1) i zrestartowałem.

Do tej pory jestem w stanie wyczyścić pamięć planu SQL za pomocą DBCC FREESYSTEMCACHE('SQL Plans');polecenia!

Czas pokaże, czy teraz używa pamięci nieco mądrzej, ale przynajmniej teraz mam sposób, aby ją zresetować, jeśli znowu stanie się zbyt rozdęta.

Nazwa profesjonalnego brzmienia
źródło
1
Wciąż sugerowałbym, aby nie czyścić często SQLCP i iść dalej i znaleźć podstawową przyczynę
Shanky
Entity Framework i niestandardowa funkcja raportowania, która pozwala prawie każdemu użytkownikowi uruchomić prawie każde zapytanie, w pewien sposób tworzy wiele zapytań ad hoc. Jeśli istnieje sposób, aby po prostu je wyczyścić lub nawet powiedzieć im, aby nigdy nie byli buforowani, może to pomóc. Do tej pory pamięć podręczna planu wahała się na poziomie około 5,8 GB od czasu instalacji dodatku SP1.
Professional Sounding Name
Masz włączone Optimize for Ad-Hoc Workload. W porównaniu do 38G, jeśli teraz bierze 5 GI, uważam, że nie byłoby to czym martwić się o obciążenie pracą
Shanky
Tak, optymalizacja pod kątem obciążenia ad-hoc jest ustawiona (jak wspomniano powyżej w pytaniu)
Profesjonalne brzmienie
1
Ten sam problem widzieliśmy 13.0.4001.0. Musiałem odbić SQL, aby wyczyścić pamięć podręczną proc. Nic się nie kompilowało, ale pamięć podręczna proc „utknęła” i nie wyczyściłaby się bez względu na to, co próbowaliśmy. Nie widziałem, żeby to się powtórzyło od czasu odesłania SQL, ale zastanawiam się, czy jest jakiś wyciek pamięci lub błąd.
GoodwinSQL,
3

Wymagania

Aby uruchomić DBCC FREEPROCCACHElub DBCC FREESYSTEMCACHEtwoje konto wymaga pozwolenia ALTER SERVER STATE.

Bibliografia

Gubernator zasobów

Czy AWS RDS dopuszcza ustawienia regulatora zasobów? Jeśli tak, to składnia jest następująca:

DBCC FREEPROCCACHE ('<pool_name>'). 

Sprawdź, czy masz baseny z:

SELECT * FROM sys.dm_resource_governor_resource_pools

Weryfikacja uprawnień

Uruchom następujące polecenie, aby ustalić, czy masz te uprawnienia:

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

Ograniczenia / ograniczenia

Istnieją pewne ograniczenia dotyczące uprawnień przyznanych administratorom instancji AWS RDS, jak udokumentowano w artykule Microsoft SQL Server na Amazon RDS w rozdziale Microsoft SQL Server Security

Oto przegląd:

Następujące role na poziomie serwera nie są obecnie dostępne w Amazon RDS:

  • bulkadmin
  • dbcreator
  • diskadmin
  • securityadmin
  • serveradmin
  • sysadmin

Następujące uprawnienia na poziomie serwera nie są dostępne w wystąpieniach bazy danych SQL Server:

  • ADMINISTER BULK OPERACJE
  • ZMIENIĆ JAKIEKOLWIEK UDOWODNIENIE
  • ZMIENIĆ DOWOLNE POWIADOMIENIE O ZDARZENIU
  • ZMIENIĆ KAŻDĄ SESJĘ WYDARZENIA
  • ZMIENIĆ KAŻDY KONTROLĘ SERWERA
  • ZMIEŃ ZASOBY
  • ZMIANA USTAWIEŃ (Do modyfikowania parametrów można użyć interfejsów API grupy parametrów DB. Aby uzyskać więcej informacji, zobacz Praca z grupami parametrów DB.
  • AUTENTYCZNY SERWER
  • CONTROL_SERVER
  • UTWÓRZ POWIADOMIENIE O ZDARZENIU DDL
  • UTWÓRZ ENDOINT
  • UTWÓRZ POWIADOMIENIE O ZDARZENIU
  • MONTAŻ DOSTĘPU ZEWNĘTRZNEGO
  • WYŁĄCZENIE (Zamiast tego można użyć opcji ponownego uruchomienia RDS)
  • NIEBEZPIECZNY MONTAŻ
  • ZMIENIĆ DOWOLNĄ GRUPĘ DOSTĘPNOŚCI (tylko SQL Server 2012)
  • UTWÓRZ DOWOLNĄ GRUPĘ DOSTĘPNOŚCI (tylko SQL Server 2012)

Te ograniczenia / ograniczenia mogły ulec zmianie od czasu opublikowania dokumentu.

Inne zasoby

Brent Ozar napisał artykuł „ SQL Server RDS ”, w którym zauważył, że ...

Wiele poleceń DBCC w ogóle nie działa - DBCC DBINFOi DBCC LOGINFOzostały wyraźnie odrzucone. Odkryłem jednak, że mogę biegać DBCC FREEPROCCACHEtak często, jak chciałem.

Pamiętaj, że ograniczenia te mogą się zmieniać z czasem - nowe funkcje są dodawane regularnie.

Wsparcie Amazon

Jeśli twoje konto ma wymagane uprawnienia i nie możesz zwolnić pamięci podręcznej, możesz otworzyć bilet pomocy technicznej w Amazon.

John aka hot2use
źródło
Zaktualizowano pytanie, w którym podano więcej szczegółów. Dziękujemy za przemyślaną i szczegółową odpowiedź. Występują problemy z uprawnieniami z innymi rzeczami w RDS, ale to powinno być obsługiwane. Skontaktuję się dzisiaj z pomocą techniczną Amazon, jeśli nie uzyskam tutaj dużej aktywności. Wydawało się, że jest to raczej problem z programem SQL Server niż problem z RDS i nie wiem, jak kompetentna lub konkretna będzie ich obsługa w porównaniu z tą wspaniałą społecznością!
Professional Sounding Name
1
Doceniam twoją opinię. Myślę, że możesz chcieć otworzyć bilet w Amazon lub Microsoft, ponieważ nic nie działa. Z drugiej strony może to być błąd lub funkcja (ograniczenie z powodu ....).
John aka hot2use,