Überwachen der Arbeitsspeicherauslastung

Gilt für:SQL Server

Überwachen Sie eine Instanz von SQL Server regelmäßig, um sicherzustellen, dass sich die Speicherauslastung in typischen Bereichen befindet.

Konfigurieren des maximalen Arbeitsspeichers für SQL Server

Standardmäßig verbraucht eine SQL Server-Instanz im Laufe der Zeit den größten Teil des verfügbaren Windows-Betriebssystemspeichers auf dem Server. Sobald der Arbeitsspeicher abgerufen wurde, wird er nicht freigegeben, es sei denn, es wird eine hohe Arbeitsspeicherauslastung erkannt. Dies ist beabsichtigt und weist nicht auf einen Speicherverlust im SQL Server-Prozess hin. Verwenden Sie die Option für den maximalen Serverspeicher, um die Menge des Arbeitsspeichers zu begrenzen, den SQL Server für die meisten seiner Verwendungen erwerben 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.

  • Speicher: Seitenfehler/Sek . Dieser Leistungsindikator gibt die Rate der Seitenfehler für alle Prozesse einschließlich Systemprozessen 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 Windows Virtual Memory Manager (VMM) übernimmt Seiten von SQL Server und anderen Prozessen, da die Arbeitssatzgrößen dieser Prozesse gekürzt werden. Infolge der VMM-Aktivität kommt es häufig zu Seitenfehlern.

  • Prozess: Seitenfehler/Sek . Dieser Leistungsindikator gibt die Rate der Seitenfehler für einen bestimmten Benutzerprozess an. Überwachen des Prozesses: Seitenfehler/Sek ., um zu ermitteln, ob die Datenträgeraktivität durch Das Paging von SQL Server verursacht wird. Um festzustellen, ob SQL Server oder ein anderer Prozess die Ursache für übermäßiges Paging ist, überwachen Sie den Prozess: Seitenfehler/Sek .-Zähler für die SQL Server-Prozessinstanz.

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

Isolieren des von SQL Server verwendeten Arbeitsspeichers

Verwenden Sie zum Überwachen der SQL Server-Speicherauslastung die folgenden SQL Server-Objektzähler. 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 seine Speicheranforderungen dynamisch basierend auf verfügbaren Systemressourcen. Wenn SQL Server mehr Arbeitsspeicher benötigt, fragt es das Betriebssystem ab, um zu ermitteln, ob freier physischer Arbeitsspeicher verfügbar ist und den verfügbaren Arbeitsspeicher verwendet. Wenn wenig freier Arbeitsspeicher für das Betriebssystem vorhanden ist, gibt SQL Server Arbeitsspeicher zurück an das Betriebssystem zurück, bis die Bedingung mit geringem Arbeitsspeicher verringert wird, oder bis SQL Server die Min.-Serverspeichergrenze erreicht. 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.

Überprüfen Sie die folgenden Leistungsindikatoren, um den von SQL Server benötigten Arbeitsspeicher zu überwachen:

  • SQL Server: Speicher-Manager: Serverspeicher gesamt (KB)
    Dieser Indikator gibt die Menge des Arbeitsspeichers des Betriebssystems an, den der SQL Server-Speicher-Manager zurzeit für SQL Server festgelegt hat. 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 an, dass sql Server basierend auf der letzten Arbeitsauslastung einen idealen Arbeitsspeicher verbrauchen kann. Vergleichen Sie den Gesamten Serverspeicher nach einem bestimmten Zeitraum des typischen Vorgangs, um zu ermitteln, ob SQL Server eine gewünschte Speichermenge zugewiesen hat. Nach einiger Zeit des normalen Betriebs sollten die Leistungsindikatoren Serverspeicher gesamt und Zielserverspeicher ähnlich sein. Wenn der Gesamte Serverspeicher deutlich niedriger ist als der Zielserverspeicher, kann die SQL Server-Instanz arbeitsspeicherdrucken. Während eines Zeitraums nach dem Starten von SQL Server wird erwartet, dass der Gesamte Serverspeicher niedriger als der Zielserverspeicher ist, da der Gesamte Serverspeicher größer wird. 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 sys.dm_os_process_memory dynamischen Verwaltungsansicht ab, wobei die physical_memory_in_use_kb Spalte beobachtet wird.

  • 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 von sqlservr.exe angeforderten Speicherzuweisungen enthält, einschließlich derjenigen, die nicht durch die Option für den maximalen Serverspeicher begrenzt sind, kann dieser Leistungsindikator Werte melden, die größer als die maximale Serverspeicheroption sind.

  • 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 Leistungsindikator ist spezifisch für SQL Server. 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: Lebenserwartung der Seite
    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. Zeigen Sie auf Servern mit mehr als einem NUMA-Knoten die Seitenlebensdauer jedes Pufferpoolknotens mithilfe von SQL Server: Pufferknoten: Seitenlebensdauer an. 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-Speicherauslastung

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;

Bestimmen der Lebenserwartung der Seite

Die folgende Abfrage verwendet sys.dm_os_performance_counters , um den aktuellen Seitenlebensdauerwert der SQL Server-Instanz auf der Ebene des Puffer-Managers und auf jeder NUMA-Knotenebene zu beobachten.

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';