SQL Server Max Memory beschränkt nicht die Verwendung von RAM

18

Ich hätte gerne Ihre Meinung dazu. Ich habe einen SQL Server 2008r2 Ent. Ed. 64bit mit 16 Kernen und 64GB RAM. Ab 20111014 ist eine Instanz von SQL Server vollständig gepatcht.

Der maximale RAM ist auf 60000 MB eingestellt. Die Menge an freiem RAM ist laut Task-Manager nach ein paar Tagen online gleich 0.

Wenn ich den maximalen RAM auf unter 53 GB ändere, wird er sich nach ein paar Tagen stabilisieren und etwas freien RAM haben.

Es ist der SQL-Prozess, der den RAM gemäß Task-Manager zuweist. Wie komme ich mit dem Problem klar? Es versteht sich von selbst, dass ich bereits viel getestet habe, dies aber noch nicht nach meinem Geschmack gelöst habe. und ohh wir bekommen nicht den typischen Speicherhunger, wenn der verfügbare RAM bis auf 0 frei ist.

Update 1:

Inspiriert von einem anderen Q / A zu RAM auf dieser Seite /dba//a/7062/2744 . Ich habe diese beiden verwendet, um zu sehen, wofür der RAM verwendet wird.

SELECT TOP ( 10 )
        [type] AS [Memory Clerk Type] ,
        SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM    sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC
OPTION  ( RECOMPILE ) ;

SELECT  DB_NAME(database_id) AS [Database Name] ,
        COUNT(*) * 8 / 1024.0 AS [Cached Size (MB)]
FROM    sys.dm_os_buffer_descriptors
--WHERE   database_id > 4 -- system databases
--        AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC
OPTION  ( RECOMPILE ) ;

Die Menge, die von diesen angezeigt wird, ist zum einen 7948432 KB, zum anderen 44030,57812 MB, das sind insgesamt etwa 52 GB, die von SQL Server verwendet werden. Also, wo ist der Rest meines RAM geblieben? :-) Task-Manager zeigen jetzt zwischengespeicherte 363, verfügbare 401, kostenlose 40 und sqlservr.exe hat privaten Speicher 64 459 656 festgelegt. Max Ram auf 60000 MB wie zuvor festgelegt.

Martin Sjöberg
quelle

Antworten:

20

Die Einstellung für den maximalen Speicher von SQL Server definiert nur die Grenzwerte für die Pufferpoolnutzung. Darüber hinaus sind variable, aber signifikante Zuweisungen erforderlich.

Jonathan Kehayias , Christian Bolton und John Samson haben Level 300/400 Beiträge zum Thema. Brent Ozar hat einen leichter zu lesenden Artikel, der vielleicht ein besserer Ausgangspunkt ist.

Ebenfalls verwandt: SQL Server 2008 R2 „Ghost Memory“

Mark Storey-Smith
quelle
Ja, ich stimme zu, dass dies nur den Pufferpool einschränkt. Vielen Dank für die Lesezeichen, die ich mir ansehen werde.
Martin Sjöberg
Ich lese gerade über diese Links und da gibt es definitiv ein paar gute Sachen. Ich werde meine Frage mit dem, was ich herausfinde, aktualisieren. Ich fühle mich auch erleichtert, dass ich die Nummer von Max Pizzeria sofort zur Verfügung habe.
Martin Sjöberg
16

Wie bereits erwähnt, sind Pufferpool und Prozedurcache die einzigen Dinge, die vom maximalen Serverspeicher gesteuert werden. Es gibt viele andere Dinge in SQL Server, die über diese Grenze hinaus Speicher aufbrauchen können. Sie umfassen (sind aber nicht beschränkt auf):

  • Datenbank-Mail
  • SQLCLR
  • Erweiterte gespeicherte Prozeduren
  • Die Binärdateien selbst
  • SQL Mail
  • SSIS
  • SSAS
  • SSRS
mrdenny
quelle
Von den oben genannten verwenden wir die Binärdateien ofc und ssis auf diesem Server.
Martin Sjöberg
1
Welche andere Software ist auf dem Server installiert? Und ich meine alles. MPIO-Treiber, Flash-Laufwerk-Treiber, Backup-Software, Anti-Virus, Sys-Interna, etc.
mrdenny
Der Server ist ziemlich sauber und neu installiert, aber einige haben wir dort. Ich werde versuchen, Ende dieser Woche eine vollständige Liste zusammenzustellen. Kurz und aus meiner Erinnerung ... wir haben ein iodrive (dell), mcafee, Prozessexplorer auf dem Desktop, iometer, treesize ...
Martin Sjöberg
1
Der FusionIO-Treiber benötigt viel Arbeitsspeicher. Das kostet wahrscheinlich viel.
Mrdenny
Kann man das beweisen? Oder um es so zu konfigurieren, dass es weniger RAM benötigt? Bis jetzt scheint es, RAM freizugeben, wenn es muss und ich habe keine Nachteile bemerkt, aber nur für den Fall, dass wir die Anzahl der ssis-Pakete erhöhen müssen, bin ich besorgt darüber, was mit der RAM-Nutzung passieren könnte.
Martin Sjöberg
2

http://msdn.microsoft.com/en-us/library/ms178067.aspx

Um den maximalen Serverspeicher zu verringern, müssen Sie möglicherweise SQL Server neu starten, um den Speicher freizugeben.

Wenn eine Seite im Pufferpool nicht auf die Festplatte geschrieben wurde, wird sie meines Erachtens erst freigegeben, wenn dies der Fall ist.

Verursacht das Verringern der Einstellung für den maximalen Arbeitsspeicher, dass SQL Server fehlerhafte Seiten löscht?

Er konnte den Puffermanager in perfmon überwachen, um dies zu überprüfen. Perfmon -> SQLServer: Puffermanager: Datenbankseiten

Craig Efrein
quelle
Möglicherweise müssen Sie SQL Server neu starten. Es ist nicht immer erforderlich. Kennen Sie die Bedingungen, unter denen ein Neustart erforderlich ist oder nicht, um Speicher freizugeben?
Nick Chammas
Ich würde diese Details in Ihre bestehende Antwort ändern und diese löschen. Vielleicht kann mrdenny Ihre Frage zum Löschen schmutziger Seiten beantworten.
Nick Chammas
1
Richtig, SQL kann eine Speicherseite nicht freigeben, solange sie fehlerhaft ist (in die geschrieben wurde). Jedes Mal, wenn das System Checkpoints erstellt, werden die fehlerhaften Seiten auf die Festplatte geschrieben. Ich glaube nicht, dass das Ändern des maximalen Serverspeichers einen Checkpoint verursacht.
Mrdenny
1
Ein Neustart der Instanz zum Ändern der Speichereinstellungen kann ein schwerwiegender Fehler sein. Während das Ändern der Speichereinstellungen keinen CHECKPOINTVorgang für die Datenbanken verursacht, wird der Prozedurcache geleert. Wenn Sie die Instanz neu starten, nur um die Speichereinstellungen zu ändern, ist nicht nur der Prozedur-Cache kalt, sondern auch der Daten-Cache. Wenn der maximale Arbeitsspeicher aufgrund fehlerhafter Seiten im Arbeitsspeicher nicht reduziert werden kann, führen Sie den CHECKPOINTBefehl in den Datenbanken aus, um die fehlerhaften Seiten auf die Festplatte zu übertragen, und ändern Sie die Speichereinstellung außerhalb der Spitzenzeiten, ohne die Instanz neu zu starten.
Jon Seigel