Teilen über


Überwachen der Arbeitsspeicherauslastung

Gilt für: SQL Server

Instanzen von SQL Server sollten regelmäßig überwacht werden, um sicherzustellen, dass sich die Speicherauslastung im normalen Bereich bewegt.

Maximalen Arbeitsspeichers für SQL Server konfigurieren

Standardmäßig kann eine SQL Server-Instanz im Laufe der Zeit einen Großteil des verfügbaren Arbeitsspeichers des Windows-Betriebssystems auf dem Server verbrauchen. Sobald der Arbeitsspeicher abgerufen wurde, wird er nicht freigegeben, es sei denn, es wird eine hohe Arbeitsspeicherauslastung erkannt. Dies ist entwurfsbedingt und kein Anzeichen für einen Arbeitsspeicherverlust im SQL Server-Prozess. Verwenden Sie die Option Max. Serverarbeitsspeicher, um die Menge des Arbeitsspeichers einzuschränken, die SQL Server für die meisten Anwendungsfälle belegen darf. Weitere Informationen finden Sie im Handbuch zur Arbeitsspeicherverwaltungsarchitektur.

In SQL Server für Linux erfolgt das Festlegen des Arbeitsspeicherlimits über das Tool „mssql-conf“ und die Einstellung „memory.memorylimitmb“.

Überwachen des Arbeitsspeichers für das Betriebssystem

Verwenden Sie die folgenden Windows-Serverleistungsindikatoren für die Überwachung auf unzureichenden Arbeitsspeicher. Viele Leistungsindikatoren für den Arbeitsspeicher des Betriebssystems können über die dynamischen Verwaltungssichten sys.dm_os_process_memory und sys.dm_os_sys_memory abgefragt werden.

  • Arbeitsspeicher: Verfügbare Bytes
    Dieser Leistungsindikator gibt an, wie viele Bytes an Arbeitsspeicher derzeit für die Verwendung durch Prozesse verfügbar sind. Niedrige Werte für den Leistungsindikator Verfügbare Bytes können darauf hinweisen, dass insgesamt zu wenig Arbeitsspeicher für das Betriebssystem vorhanden ist. Dieser Wert kann per T-SQL mit sys.dm_os_sys_memory.available_physical_memory_kb abgefragt werden.

  • Arbeitsspeicher: Seiten/s
    Dieser Leistungsindikator gibt die Anzahl der Seiten an, die entweder aufgrund von harten Seitenfehlern vom Datenträger abgerufen oder auf den Datenträger geschrieben wurden, um Speicherplatz im Arbeitssatz aufgrund von Seitenfehlern freizugeben. Ein hoher Wert für den Indikator Seiten/s kann auf überhöhte Auslagerungen hindeuten.

  • Arbeitsspeicher: Seitenfehler/s Dieser Leistungsindikator gibt die Rate der Seitenfehler für alle Prozesse und Systemprozesse an. Eine geringe Rate an Auslagerung auf den Datenträger, die aber nicht null (0) entspricht, ist normal, selbst wenn der Computer über ausreichend Arbeitsspeicher verfügt. Der Microsoft-Manager für virtuellen Arbeitsspeicher (VMM, Virtual Memory Manager) entnimmt Seiten von SQL Server und anderen Prozessen, um die Größen der Workingsets dieser Prozesse anzupassen. Infolge der VMM-Aktivität kommt es häufig zu Seitenfehlern.

  • Prozess: Seitenfehler/s Dieser Zähler gibt die Rate der Seitenfehler für einen Benutzerprozess an. Überwachen Prozess: Seitenfehler/s, um zu ermitteln, ob die Datenträgeraktivität durch die Auslagerung von SQL Server verursacht wird. Sie sollten den Indikator Prozess: Seitenfehler/s der SQL Server-Prozessinstanz überprüfen, um zu ermitteln, ob die überhöhten Auslagerungen von SQL Server oder einem anderen Prozess verursacht werden.

Weitere Informationen zum Auflösen überhöhter Auslagerungen finden Sie in der Betriebssystemdokumentation.

Isolieren des von SQL Server verwendeten Arbeitsspeichers

Zum Überwachen der Arbeitsspeicherauslastung von SQL Server können Sie die folgenden SQL Server-Objektleistungsindikatoren verwenden. Viele SQL Server-Objektleistungsindikatoren können über die dynamischen Verwaltungssichten sys.dm_os_performance_counters und sys.dm_os_process_memory abgefragt werden.

Standardmäßig verwaltet SQL Server die Arbeitsspeicheranforderungen dynamisch anhand der verfügbaren Systemressourcen. Wenn SQL Server mehr Arbeitsspeicher benötigt, wird das Betriebssystem nach der Verfügbarkeit von freiem physischem Arbeitsspeicher abgefragt. Anschließend wird der verfügbare Arbeitsspeicher verwendet. Wenn für das Betriebssystem nicht genügend Arbeitsspeicher zur Verfügung steht, gibt SQL Server Arbeitsspeicher wieder für das Betriebssystem frei, bis der Zustand des unzureichenden Arbeitsspeichers beseitigt wurde, oder bis das Limit Min. Serverarbeitsspeicher erreicht wurde. Sie können die Option zur dynamischen Verwendung des Arbeitsspeichers jedoch auch mithilfe der Serverkonfigurationsoptionen Min. Serverarbeitsspeicher und Max. Serverarbeitsspeicher überschreiben. Weitere Informationen finden Sie unter Arbeitsspeicheroptionen für den Server.

Um die Menge des von SQL Server verwendeten Arbeitsspeichers zu überwachen, sollten Sie die folgenden Leistungsindikatoren überprüfen:

  • SQL Server: Speicher-Manager: Serverspeicher gesamt (KB)
    Dieser Leistungsindikator gibt die Menge des Arbeitsspeichers des Betriebssystems an, die der SQL Server-Arbeitsspeicher-Manager derzeit für SQL Server beansprucht. Es wird erwartet, dass diese Zahl entsprechend der tatsächlichen Aktivität und nach dem Start von SQL Server steigt. Fragen Sie diesen Leistungsindikator mithilfe der dynamischen Verwaltungssicht sys.dm_os_sys_info ab, und beobachten Sie die Spalte committed_kb.

  • SQL Server: Speicher-Manager: Zielserverspeicher (KB)
    Dieser Leistungsindikator gibt den idealen Arbeitsspeicher auf Grundlage der aktuellen Arbeitsauslastung an, den SQL Server verbrauchen kann. Vergleichen Sie diesen Leistungsindikator nach einiger Zeit mit normalen Betrieb mit dem Serverspeicher gesamt, um zu ermitteln, ob SQL Server über den gewünschten Arbeitsspeicher verfügt. Nach einiger Zeit des normalen Betriebs sollten die Leistungsindikatoren Serverspeicher gesamt und Zielserverspeicher ähnlich sein. Wenn der Wert von Serversspeicher gesamt erheblich niedriger als der Wert von Zielserverspeicher ist, liegt bei der SQL Server-Instanz möglicherweise eine hohe Arbeitsspeicherauslastung vor. Für eine gewisse Zeit nach Start von SQL Server wird erwartet, dass der Wert von Serverspeicher gesamt niedriger als der Wert von Zielserverspeicher ist, da Serverspeicher gesamt noch steigt. Fragen Sie diesen Leistungsindikator mithilfe der dynamischen Verwaltungssicht sys.dm_os_sys_info ab, und beobachten Sie die Spalte committed_target_kb. Weitere Informationen und bewährte Methoden zum Konfigurieren des Arbeitsspeichers finden Sie in den Konfigurationsoptionen für den Serverarbeitsspeicher.

  • Prozess: Arbeitsseiten
    Dieser Leistungsindikator gibt den physischen Speicher an, der derzeit laut dem Betriebssystem von einem Prozess verwendet wird. Beachten Sie die Instanz „sqlservr.exe“ dieses Leistungsindikators. Fragen Sie diesen Leistungsindikator mithilfe der dynamischen Verwaltungssicht sys.dm_os_process_memory ab, und beobachten Sie die Spalte physical_memory_in_use_kb.

  • Prozess: Private Bytes
    Dieser Leistungsindikator gibt die Menge des Arbeitsspeichers an, den ein Prozess für die eigene Verwendung vom Betriebssystem angefordert hat. Beachten Sie die Instanz „sqlservr.exe“ dieses Leistungsindikators. Da dieser Leistungsindikator alle Arbeitsspeicherzuweisungen umfasst, die von „sqlservr.exe“ angefordert wurden, einschließlich derer, die nicht von der Option Max. Serverarbeitsspeicher begrenzt werden, kann dieser Leistungsindikator Werte melden, die über dem Wert der Option Max. Serverarbeitsspeicher liegen.

  • SQL Server: Puffer-Manager: Datenbankseiten
    Dieser Leistungsindikator gibt die Anzahl der Seiten im Pufferpool mit Datenbankinhalten an. Dieser Leistungsindikator umfasst keinen Arbeitsspeicher im SQL Server-Prozess, der nicht im Zusammenhang mit dem Pufferpool steht. Sie können diesen Leistungsindikator mithilfe der dynamischen Verwaltungssicht sys.dm_os_performance_counters abfragen.

  • SQL Server: Puffer-Manager: Puffercache-Trefferquote
    Dieser Wert ist für SQL Server spezifisch. Eine Quote von 90 oder höher ist wünschenswert. Ein Wert von über 90 gibt an, dass mehr als 90 Prozent aller Datenanforderungen vom Datencache im Arbeitsspeicher erfüllt wurden, ohne dass vom Datenträger gelesen werden musste. Weitere Informationen zum SQL Server-Puffer-Manager finden Sie im Artikel zum SQL Server-Puffer-Manager-Objekt. Sie können diesen Leistungsindikator mithilfe der dynamischen Verwaltungssicht sys.dm_os_performance_counters abfragen.

  • SQL Server: Puffer-Manager: Seitenlebenserwartung
    Dieser Leistungsindikator misst die Zeit in Sekunden, die die älteste Seite im Pufferpool verbleibt. Bei Systemen, die eine NUMA-Architektur verwenden, handelt es sich hierbei um einen Durchschnittswert aller NUMA-Knoten. Ein höherer, steigender Wert ist am besten. Ein plötzlicher Abfall weist auf signifikante Datenänderungen innerhalb und außerhalb des Pufferpools hin. Das bedeutet, dass die Arbeitsauslastung nicht vollständig von den Daten profitieren konnte, die sich bereits im Arbeitsspeicher befanden. Jeder NUMA-Knoten verfügt über einen eigenen Knoten des Pufferpools. Auf Servern mit mehreren NUMA-Knoten können Sie die Seitenlebenserwartung der einzelnen Pufferpoolknoten mit SQL Server: Pufferknoten: Seitenlebenserwartung aufrufen. Sie können diesen Leistungsindikator mithilfe der dynamischen Verwaltungssicht sys.dm_os_performance_counters abfragen.

Beispiele

Bestimmen der aktuellen Speicherbelegung

Die folgenden Abfragen geben Informationen über aktuell belegten Arbeitsspeicher zurück.

SELECT
(total_physical_memory_kb/1024) AS Total_OS_Memory_MB,
(available_physical_memory_kb/1024)  AS Available_OS_Memory_MB
FROM sys.dm_os_sys_memory;

SELECT  
(physical_memory_in_use_kb/1024) AS Memory_used_by_Sqlserver_MB,  
(locked_page_allocations_kb/1024) AS Locked_pages_used_by_Sqlserver_MB,  
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,
process_physical_memory_low,  
process_virtual_memory_low  
FROM sys.dm_os_process_memory;  

Ermitteln der aktuellen SQL Server-Arbeitsspeicherauslastung

Die folgende Abfrage gibt Informationen über die aktuelle SQL Server-Arbeitsspeicherauslastung zurück.

SELECT
sqlserver_start_time,
(committed_kb/1024) AS Total_Server_Memory_MB,
(committed_target_kb/1024)  AS Target_Server_Memory_MB
FROM sys.dm_os_sys_info;

Ermitteln der Seitenlebenserwartung

Die folgende Abfrage verwendet sys.dm_os_performance_counters zum Beobachten des aktuellen Werts für die Seitenlebenserwartung der SQL Server-Instanz auf Puffer-Manager-Gesamtebene und auf jeder NUMA-Knotenebene.

SELECT
CASE instance_name WHEN '' THEN 'Overall' ELSE instance_name END AS NUMA_Node, cntr_value AS PLE_s
FROM sys.dm_os_performance_counters    
WHERE counter_name = 'Page life expectancy';