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.
quelle
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):
quelle
Ab SQL 2012 wurde single_pages_kb in dieser DMV durch pages_kb ersetzt. https://msdn.microsoft.com/en-us/library/ms175019.aspx?f=255&MSPPError=-2147217396
Wenn Sie die in der Frage enthaltene Abfrage auf einem Server ab 2012 ausführen möchten, entfernen Sie die Zeichenfolge single_.
quelle
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
quelle
CHECKPOINT
Vorgang 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 denCHECKPOINT
Befehl 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.