Freigeben ü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 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 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 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.

  • Speicher: Seiten/Sek. Dieser Leistungsindikator gibt die Anzahl der Seiten an, die entweder aufgrund von Festplattenfehlern vom Datenträger abgerufen oder auf den Datenträger geschrieben wurden, um Speicherplatz im Arbeitssatz aufgrund von Seitenfehlern freizusetzen. 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

Verwenden Sie zum Überwachen der SQL Server-Speicherauslastung die folgenden SQL Server-Objekte. 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 es wenig freien Arbeitsspeicher für das Betriebssystem gibt, gibt SQL Server Arbeitsspeicher wieder 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 Server-Speicher-Konfigurationsoptionen.

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

  • SQL Server: Speicher-Manager: Gesamter Serverspeicher (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 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 Gesamte Serverspeicher erheblich niedriger ist als der Zielserverspeicher, kann die SQL Server-Instanz arbeitsspeicherdrucken. 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: Arbeitssatz Dieser Indikator gibt die Menge des physischen Arbeitsspeichers an, der von einem Prozess verwendet wird, der derzeit gemäß dem Betriebssystem 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 Indikator gibt die Menge des Arbeitsspeichers an, den ein Prozess für seine eigene Verwendung für das 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 Indikator gibt die Anzahl der Seiten im Pufferpool mit Datenbankinhalt an. Enthält keinen anderen Nichtpufferpoolspeicher innerhalb des SQL Server-Prozesses. Sie können diesen Leistungsindikator mithilfe der dynamischen Verwaltungssicht sys.dm_os_performance_counters abfragen.

  • SQL Server: Puffer-Manager: Puffercachetrefferverhältnis 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 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 Indikator misst die Zeitspanne 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 Sprung zeigt einen erheblichen Abbruch von Daten in und aus dem Pufferpool an, was bedeutet, dass die Workload nicht vollständig von Daten profitieren konnte, die sich bereits im Arbeitsspeicher befinden. 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';