Weder DBCC FREEPROCCACHE noch DBCC FREESYSTEMCACHE ('SQL Plans') tun etwas, um CACHESTORE_SQLCP-Speicher freizugeben

13

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

Grafik zum Speicherverbrauch Speicherverbrauchstabelle

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

Die Ausgabe von DBCC FREEPROCCACHEist

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.

Professioneller klingender Name
quelle

Antworten:

5

Ich habe auf 13.00.4422.0.v1 (SQL Server 2016 SP1) aktualisiert und neu gestartet.

Bisher kann ich den SQL Plan-Speicher mit dem DBCC FREESYSTEMCACHE('SQL Plans');Befehl löschen !

Die Zeit wird zeigen, ob der Speicher jetzt etwas klüger ist, aber zumindest kann ich ihn jetzt zurücksetzen, wenn er wieder zu aufgebläht ist.

Professioneller klingender Name
quelle
1
Dennoch würde ich vorschlagen, SQLCP nicht häufig zu löschen und die Grundursache herauszufinden
Shanky
Entity Framework und eine benutzerdefinierte Berichtsfunktion, mit der nahezu jeder Benutzer nahezu jede Abfrage ausführen kann, erstellen eine Vielzahl von Ad-hoc-Abfragen. Wenn es eine Möglichkeit gäbe, diese einfach zu bereinigen oder ihnen sogar zu sagen, dass sie gar nicht erst zwischengespeichert werden sollen, könnte dies helfen. Bisher lag der Plan-Cache seit der Installation von SP1 bei etwa 5,8 GB.
Professional Sounding Name
Haben Sie aktiviert Optimize for Ad-Hoc Workload. In Bezug auf 38G verglichen , wenn es jetzt 5 GI nimmt glauben , dass dies nicht etwas zu befürchten unter Berücksichtigung der Arbeitsbelastung wäre
Shanky
Ja, Optimieren für Ad-hoc - Workload wird (wie oben in Frage sagt)
Professionelle klingender Name
1
Wir haben dasselbe Problem am 13.0.4001.0 gesehen. Musste SQL bouncen, um den Proc-Cache zu leeren. Es wurde nichts kompiliert, aber der Proc-Cache steckte fest und würde nicht gelöscht, egal was wir versuchten. Ich habe es seit dem Bouncen von SQL nicht mehr gesehen, aber ich frage mich, ob es eine Art von Speicherverlust oder -fehler gibt.
GoodwinSQL
3

Bedarf

Um zu laufen DBCC FREEPROCCACHEoder DBCC FREESYSTEMCACHEIhr Konto erfordert die Erlaubnis ALTER SERVER STATE.

Verweise

Ressourcengouverneur

Ermöglicht AWS RDS Resource Governor-Einstellungen? Wenn ja, lautet die Syntax:

DBCC FREEPROCCACHE ('<pool_name>'). 

Finden Sie heraus, ob Sie Pools haben mit:

SELECT * FROM sys.dm_resource_governor_resource_pools

Überprüfen der Berechtigungen

Führen Sie den folgenden Befehl aus, um festzustellen, ob Sie über diese Berechtigungen verfügen:

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

Einschränkungen / Restriktionen

Es gibt einige Einschränkungen für die Berechtigungen, die Administratoren von AWS RDS-Instanzen gewährt werden, wie im Artikel Microsoft SQL Server bei Amazon RDS im Kapitel Microsoft SQL Server-Sicherheit beschrieben

Hier eine Übersicht:

Die folgenden Rollen auf Serverebene sind derzeit in Amazon RDS nicht verfügbar:

  • bulkadmin
  • dbcreator
  • diskadmin
  • securityadmin
  • serveradmin
  • Sysadmin

Die folgenden Berechtigungen auf Serverebene sind für SQL Server-DB-Instanzen nicht verfügbar:

  • ADMINISTER-MASSENVORGÄNGE
  • ÄNDERN SIE JEDES KREDENTIELLE
  • ALTER JEDE EREIGNISMELDUNG
  • ALTER JEDE EREIGNISSITZUNG
  • ALTER JEGLICHE SERVER-PRÜFUNG
  • ALTER RESOURCES
  • ALTER SETTINGS (Sie können die DB-Parametergruppen-APIs zum Ändern von Parametern verwenden. Weitere Informationen finden Sie unter Arbeiten mit DB-Parametergruppen.
  • AUTHENTICATE SERVER
  • CONTROL_SERVER
  • DDL-EREIGNISMELDUNG ERSTELLEN
  • ENDPUNKT ERSTELLEN
  • TRACE EVENT NOTIFICATION ERSTELLEN
  • EXTERNE ZUGRIFFSMONTAGE
  • Herunterfahren (Sie können stattdessen die RDS-Neustartoption verwenden)
  • UNSICHERE MONTAGE
  • ALTER JEDE VERFÜGBARKEITSGRUPPE (nur SQL Server 2012)
  • ERSTELLEN EINER VERFÜGBARKEITSGRUPPE (nur SQL Server 2012)

Diese Einschränkungen haben sich möglicherweise geändert, seit das Dokument veröffentlicht wurde.

Andere Ressourcen

Brent Ozar schrieb einen Artikel " SQL Server RDS ", in dem er feststellte, dass ...

Viele DBCC-Befehle funktionieren überhaupt nicht - DBCC DBINFOund DBCC LOGINFOwurden ausdrücklich abgelehnt. Ich stellte jedoch fest, dass ich DBCC FREEPROCCACHEso oft laufen konnte, wie ich wollte.

Beachten Sie, dass sich diese Einschränkungen im Laufe der Zeit ändern können. Es werden regelmäßig neue Funktionen hinzugefügt.

Amazon-Support

Wenn Ihr Konto über die erforderlichen Berechtigungen verfügt und Sie den Cache nicht freigeben können, möchten Sie möglicherweise ein Support-Ticket bei Amazon eröffnen.

John aka hot2use
quelle
Aktualisierte Frage mit mehr Details auf dieser Basis. Vielen Dank für Ihre nachdenkliche und ausführliche Antwort. Ich habe Berechtigungsprobleme mit anderen Dingen in RDS, aber dies sollte unterstützt werden. Ich werde mich später an den Amazon-Support wenden, wenn ich hier nicht viel zu tun habe. Es schien eher ein SQL Server-Problem als ein RDS-Problem zu sein, und ich weiß nicht, wie kompetent oder spezifisch ihre Unterstützung im Vergleich zu dieser guten Community sein wird!
Professional Sounding Name
1
Ich freue mich über Ihr Feedback. Vielleicht möchten Sie ein Ticket bei Amazon oder Microsoft eröffnen, da anscheinend nichts funktioniert. Und andererseits könnte es sich um einen Fehler oder eine Funktion handeln (Einschränkung aufgrund von ....).
John aka hot2use