SQL Server-Speicher
Es geht um den SQL Server-Speicher. Wenn der Server nicht genügend Arbeitsspeicher hat, empfehlen wir, der Hardware zusätzlichen Arbeitsspeicher hinzuzufügen, um Probleme mit der CPU-Auslastung zu beheben.
Bevor wir jedoch im Rahmen der Fehlerbehebung mit dem Speicher-Upgrade fortfahren, wie überprüfen / berechnen wir den SQL-Speicher, der derzeit auf der Instanz belegt ist.
Zum Beispiel:
Servername: XXXXXXXXXXXXX
Installierter physischer Speicher (RAM): 64,0 GB
Derzeit zugewiesener SQL Server-Speicher: 58982 MB -> 58,982 GB
In diesem Fall haben wir nur eine Instanz (MSSQLSERVER) auf dem Server und der Instanz wurden gemäß Standard 80% Speicher zugewiesen. Und 20% entfallen auf Anwendung und Betriebssystem.
Wenn wir den Ressourcenmonitor überprüfen, wird er zu 80% gefüllt angezeigt, da wir den SQL Server-Speicher darauf eingestellt haben.
Dies bedeutet jedoch nicht, dass 80% von SQL vollständig genutzt werden, da SQL im Backend etwas Speicherplatz im Puffer behält. Beim Surfen habe ich die folgende Formel erhalten, um den für die Instanz verbrauchten SQL-Speicher zu berechnen, aber diese Parameter wurden vor langer Zeit im Performance Monitor-Tool entfernt.
Gibt es eine Möglichkeit zu überprüfen, wie viel SQL derzeit zu 80% (ODER) für die Metriken verwendet wird, die wir für die Speichererweiterung verwenden können?
FORMEL ZUR BERECHNUNG DES SQL-SPEICHERS: (Die folgenden Parameter wurden aus dem Leistungsmonitor entfernt.)
*Database Usage(GB) = (Totalpages-Freepages-Stolenpages)8/1024=MB/1024=GB
Antworten
Wie überprüfen / berechnen wir den SQL-Speicher, der derzeit auf der Instanz belegt ist?
Das ist ganz einfach. Sie haben DMV sys.dm_os_process_memory , das Ihnen die Informationen gibt. Es wird dir physical memory usedund gebentotal memory used (RAM+Page file)
select (physical_memory_in_use_kb/1024) as Phy_Mem_used_MB, (virtual_address_space_committed_kb/1024) as Total_mem_Used_MB
from sys.dm_os_process_memory
Dies bedeutet jedoch nicht, dass 80% von SQL vollständig ausgelastet sind, da SQL im Backend etwas Speicherplatz im Puffer behält
Sobald SQL Server den maximalen Serverspeicherwert erreicht hat, wird dieser Speicher beibehalten, es sei denn, die Benachrichtigung über niedrigen Speicher fordert ihn auf, Speicher freizugeben. Also ja, es wird vielleicht nicht alles verwendet, aber es wird es trotzdem halten. Dies wird als Caching bezeichnet, da dies dazu beiträgt, Fehler bei harten Seiten zu vermeiden.
Gibt es eine Möglichkeit zu überprüfen, wie viel SQL derzeit zu 80% (ODER) für die Metriken verwendet wird, die wir für die Speichererweiterung verwenden können?
Wie ich bereits sagte, wird nach der Verwendung der gesamte Speicher als verwendet angezeigt, auch wenn diese Seiten bei der Abfrageverarbeitung nicht benötigt werden. Wenn eine neue Anfrage eingeht, werden diese Seiten verschoben, um Platz für neue Seiten zu schaffen.
Wie definieren Sie "genutzt"? Würde eine Seite, die vor einer Sekunde in den Cache eingelesen wurde, als verwendet gezählt? Vor einer Minute? Eine Stunde? Eine Woche?
Der Punkt ist, dass es keine Dinge wie "verwendet" gibt. SQL Server speichert Seiten (und andere Dinge) im Speicher. Bei Speicherdruck (intern oder extern) wird (im Grunde genommen) ein herkömmlicher Cache-Alterungsmechanismus verwendet, um Dinge zu entfernen, die zuletzt verwendet wurden. Natürlich gibt es viel mehr Details zur Speicherbehandlung (Cache), aber im Prinzip wird sie wie jeder Caching-Mechanismus behandelt.
Konzepte wie "genutzt" oder optimale Konfiguration gibt es also einfach nicht. Sie können natürlich sehen, ob eine Menge Speicher von SQL Server überhaupt nicht verwendet wird. Wenn SQL Server jedoch Speicher zuweist, bleibt dieser hängen, es sei denn, es besteht Speicherdruck. Wer weiß, vielleicht braucht jemand diese Seite in der nächsten Sekunde?
Sie können beispielsweise den maximalen Serverspeicher reduzieren und sehen, wann Ihre Leistung beeinträchtigt wird.
Verwenden Sie die MemoryManagerInfogespeicherte Prozedur, die Sie hier finden:
https://github.com/aleksey-vitsko/Database-Administrator-Tools
Es bietet eine gute Übersicht darüber, wie SQL Server derzeit Speicher verwendet:
Siehe Beispiel in diesem Bild unten - das verbraucht mein Server derzeit:
Ungefähr Total Server Memory= Database Cache Memory+ Free Memory+ Stolen Server Memory(Der gestohlene Serverspeicher enthält Plan-Cache, Sperren usw.)