Verwenden Sie den Befehl DBCC MEMORYSTATUS, um die Speicherauslastung in SQL Server

In diesem Artikel wird beschrieben, wie Sie den DBCC MEMORYSTATUS Befehl verwenden, um die Speicherauslastung zu überwachen.

Ursprüngliche Produktversion: SQL Server
Ursprüngliche KB-Nummer: 907877

Einführung

Der DBCC MEMORYSTATUS Befehl stellt eine Momentaufnahme des aktuellen Arbeitsspeichers status Microsoft SQL Server und des Betriebssystems bereit. Es bietet eine der detailliertesten Ausgaben der Speicherverteilung und -nutzung in SQL Server. Sie können die Ausgabe verwenden, um Probleme mit dem Arbeitsspeicherverbrauch in SQL Server zu beheben oder um bestimmte Fehler mit nicht genügend Arbeitsspeicher zu beheben. Viele Fehler mit nicht genügend Arbeitsspeicher generieren diese Ausgabe automatisch im Fehlerprotokoll. Wenn ein Fehler auftritt, der mit einer Bedingung mit wenig Arbeitsspeicher zusammenhängt, können Sie den DBCC MEMORYSTATUS Befehl ausführen und die Ausgabe bereitstellen, wenn Sie Microsoft-Support kontaktieren.

Die Ausgabe des DBCC MEMORYSTATUS Befehls enthält Abschnitte für Speicherverwaltung, Speicherauslastung, aggregierte Speicherinformationen, Pufferpoolinformationen und Prozedurcacheinformationen. Außerdem wird die Ausgabe von globalen Speicherobjekten, Abfragespeicherobjekten, Optimierung und Speicherbrokern beschrieben.

Hinweis

Leistungsmonitor (PerfMon) und Task-Manager berücksichtigen nicht die vollständige Speicherauslastung, wenn die Option Gesperrte Seiten im Arbeitsspeicher aktiviert ist. Es gibt keine Leistungsindikatoren, die die Speicherauslastung der AWE-API (Address Windowing Extensions) anzeigen.

Wichtig

Der DBCC MEMORYSTATUS Befehl soll ein Diagnosetool für Microsoft-Support sein. Das Format der Ausgabe und der angegebene Detailgrad können sich zwischen Service Packs und Produktreleases ändern. Die Funktionalität, die der DBCC MEMORYSTATUS Befehl bereitstellt, kann in späteren Produktversionen durch einen anderen Mechanismus ersetzt werden. Daher funktioniert dieser Befehl in späteren Produktversionen möglicherweise nicht mehr. Es werden keine zusätzlichen Warnungen ausgegeben, bevor dieser Befehl geändert oder entfernt wird. Daher können Anwendungen, die diesen Befehl verwenden, ohne Warnung unterbrechen.

Die Ausgabe des DBCC MEMORYSTATUS Befehls hat sich gegenüber früheren Versionen von SQL Server geändert. Derzeit enthält sie mehrere Tabellen, die in früheren Produktversionen nicht verfügbar waren.

Verwenden von DBCC MEMORYSTATUS

DBCC MEMORYSTATUSwird in der Regel verwendet, um Probleme mit wenig Arbeitsspeicher zu untersuchen, die von SQL Server gemeldet werden. Zu wenig Arbeitsspeicher kann auftreten, wenn entweder externer Arbeitsspeicher von außerhalb des SQL Server Prozesses oder interner Druck, der aus dem Prozess entsteht, besteht. Interner Druck kann durch die SQL Server Datenbank-Engine oder durch andere Komponenten verursacht werden, die innerhalb des Prozesses ausgeführt werden (z. B. Verbindungsserver, XPs, SQLCLR, Angriffsschutz oder Antivirensoftware). Weitere Informationen zur Problembehandlung bei Arbeitsspeicherauslastung finden Sie unter Behandeln von Problemen mit unzureichendem oder unzureichendem Arbeitsspeicher in SQL Server.

Im Folgenden finden Sie die allgemeinen Schritte für die Verwendung des Befehls und die Interpretation der Ergebnisse. In bestimmten Szenarien ist es möglicherweise erforderlich, dass Sie die Ausgabe etwas anders angehen, aber der allgemeine Ansatz wird hier beschrieben.

  1. Führen Sie den Befehl DBCC MEMORYSTATUS aus.
  2. Verwenden Sie die Abschnitte Prozess-/Systemanzahl und Arbeitsspeicher-Manager, um festzustellen, ob externer Arbeitsspeicher knapp ist (z. B. wenn der physische oder virtuelle Arbeitsspeicher auf dem Computer gering ist oder der SQL Server Arbeitssatz ausgelagert wird). Verwenden Sie außerdem diese Abschnitte, um zu bestimmen, wie viel Arbeitsspeicher die SQL Server Datenbank-Engine im Vergleich zum Gesamtspeicher auf dem System belegt hat.
  3. Wenn Sie feststellen, dass der externe Arbeitsspeicher nicht ausreicht, versuchen Sie, die Speicherauslastung durch andere Anwendungen und das Betriebssystem zu reduzieren, oder fügen Sie mehr RAM hinzu.
  4. Wenn Sie feststellen, dass die SQL Server-Engine den größten Teil des Arbeitsspeichers verwendet (interner Arbeitsspeicherauslastung), können Sie die verbleibenden Abschnitte von DBCC MEMORYSTATUS verwenden, um zu ermitteln, welche Komponenten (Memory Clerk, Cachestore, UserStore oder Objectstore) die größten Mitwirkender für diese Speicherauslastung sind.
  5. Untersuchen Sie jede Komponente: MEMORYCLEARK, CACHESTORE, USERSTOREund OBJECTSTORE. Überprüfen Sie den Wert der zugeordneten Seiten, um zu ermitteln, wie viel Arbeitsspeicher diese Komponente innerhalb SQL Server verbraucht. Eine kurze Beschreibung der meisten Arbeitsspeicherkomponenten der Datenbank-Engine finden Sie in der Tabelle Memory Clerk-Typen .
    1. In seltenen Fällen handelt es sich bei der Zuordnung um eine direkte virtuelle Zuordnung, anstatt den SQL Server Speicher-Manager zu durchlaufen. Überprüfen Sie in diesen Fällen den Wert für vm committet unter der spezifischen Komponente anstelle von Zugeordnete Seiten.
    2. Wenn Ihr Computer NUMA verwendet, werden einige Speicherkomponenten pro Knoten aufgeteilt. Sie können z. B. , OBJECTSTORE_LOCK_MANAGER (node 1), OBJECTSTORE_LOCK_MANAGER (node 2), usw. beobachten OBJECTSTORE_LOCK_MANAGER (node 0)und schließlich einen summierten Wert jedes Knotens in OBJECTSTORE_LOCK_MANAGER (Total)beobachten. Der beste Ausgangspunkt ist der Abschnitt, in dem der Gesamtwert gemeldet wird, und dann die Aufschlüsselung nach Bedarf zu untersuchen. Weitere Informationen finden Sie unter Arbeitsspeichernutzung mit NUMA-Knoten.
  6. Einige Abschnitte von DBCC MEMORYSTATUS enthalten detaillierte und spezielle Informationen zu bestimmten Speicherzuordnungen. Sie können diese Abschnitte verwenden, um zusätzliche Details zu verstehen und eine weitere Aufschlüsselung der Zuweisungen innerhalb eines Arbeitsspeicher-Clerks anzuzeigen. Beispiele für solche Abschnitte sind Pufferpool (Daten- und Indexcache), Prozedurcache/Plancache, Abfragespeicherobjekte (Speicherzuweisungen), Optimierungswarteschlange und kleine sowie mittlere und große Gateways (Optimiererspeicher). Wenn Sie bereits wissen, dass eine bestimmte Komponente des Arbeitsspeichers in SQL Server die Quelle der Arbeitsspeicherauslastung ist, sollten Sie es vorziehen, direkt zu diesem bestimmten Abschnitt zu wechseln. Wenn Sie beispielsweise auf andere Weise festgestellt haben, dass eine hohe Speicherzuweisungsauslastung zu Speicherfehlern führt, können Sie den Abschnitt Abfragen von Speicherobjekten lesen.

Im weiteren Verlauf dieses Artikels werden einige der nützlichen Leistungsindikatoren in der Ausgabe beschrieben, mit denen DBCC MEMORYSTATUS Sie Speicherprobleme effektiver diagnostizieren können.

Prozess-/Systemanzahl

Dieser Abschnitt enthält eine Beispielausgabe in einem tabellarischen Format und beschreibt die zugehörigen Werte.

Process/System Counts                Value
------------------------------------ ------------
Available Physical Memory            5060247552
Available Virtual Memory             140710048014336
Available Paging File                7066804224
Working Set                          430026752
Percent of Committed Memory in WS    100
Page Faults                          151138
System physical memory high          1
System physical memory low           0
Process physical memory low          0
Process virtual memory low           0

In der folgenden Liste werden Werte und ihre Beschreibungen erläutert:

  • Verfügbarer physischer Arbeitsspeicher: Dieser Wert zeigt die Gesamtmenge des freien Arbeitsspeichers auf dem Computer an. Im Beispiel beträgt der freie Arbeitsspeicher 5.060.247.552 Byte.
  • Verfügbarer virtueller Arbeitsspeicher: Dieser Wert zeigt an, dass die Gesamtmenge des freien virtuellen Arbeitsspeichers für SQL Server Prozess 140.710.048.014.336 Bytes (128 TB) beträgt. Weitere Informationen finden Sie unter Grenzwerte für Arbeitsspeicher und Adressraum.
  • Verfügbare Auslagerungsdatei: Dieser Wert zeigt den freien Auslagerungsdateispeicherplatz an. Im Beispiel ist der Wert 7.066.804.224 Bytes.
  • Arbeitssatz: Dieser Wert zeigt die Gesamtmenge des virtuellen Arbeitsspeichers an, über die der SQL Server Prozess im RAM verfügt (wird nicht ausgelagert) beträgt 430.026.752 Byte.
  • Prozentsatz des zugesicherten Arbeitsspeichers in WS: Dieser Wert gibt an, in welchem Prozentsatz SQL Server zugeordneten virtuellen Arbeitsspeichers sich im RAM befindet (oder der Arbeitssatz ist). Der Wert von 100 Prozent zeigt, dass der gesamte zugesicherte Arbeitsspeicher im RAM gespeichert und 0 Prozent davon ausgelagert werden.
  • Seitenfehler: Dieser Wert zeigt die Gesamtmenge der harten und weichen Seitenfehler für die SQL Server an. Im Beispiel ist der Wert 151.138.

Die verbleibenden vier Werte sind binär oder boolesch.

  • Der hohe Wert des physischen Arbeitsspeichers des Systems von 1 gibt an, dass SQL Server den verfügbaren physischen Arbeitsspeicher auf dem Computer für hoch hält. Aus diesem Grund ist der Wert des physischen Arbeitsspeichers des Systems niedrig 0, was bedeutet, dass kein geringer Arbeitsspeicher vorhanden ist. Eine ähnliche Logik wird auf verarbeitungsbasierten physischen Arbeitsspeicher low und Process virtual memory low angewendet, wobei 0 für false und 1 für true steht. In diesem Beispiel sind beide Werte 0, was bedeutet, dass für den SQL Server Prozess ausreichend physischer und virtueller Arbeitsspeicher vorhanden ist.

Speicher-Manager

Dieser Abschnitt enthält eine Beispielausgabe des Speicher-Managers, die den Gesamtspeicherverbrauch nach SQL Server zeigt.

Memory Manager             KB
-------------------------- --------------------
VM Reserved                36228032
VM Committed               326188
Locked Pages Allocated     0
Large Pages Allocated      0
Emergency Memory           1024
Emergency Memory In Use    16
Target Committed           14210416
Current Committed          326192
Pages Allocated            161904
Pages Reserved             0
Pages Free                 5056
Pages In Use               286928
Page Alloc Potential       15650992
NUMA Growth Phase          0
Last OOM Factor            0
Last OS Error              0

In der folgenden Liste werden Werte in der Ausgabe und ihre Beschreibungen erläutert:

  • Reservierter virtueller Computer: Dieser Wert zeigt die Gesamtmenge des virtuellen Adressraums (VAS) oder des virtuellen Arbeitsspeichers (VM) an, der SQL Server reserviert hat. Die Reservierung des virtuellen Speichers verwendet tatsächlich keinen physischen Speicher. dies bedeutet einfach, dass virtuelle Adressen innerhalb des großen VAS weggesetzt werden. Weitere Informationen finden Sie unter VirtualAlloc(), MEM_RESERVE.

  • VM Committet: Dieser Wert zeigt die Gesamtmenge des virtuellen Arbeitsspeichers (VM), für den SQL Server ein Commit ausgeführt hat (in KB). Dies bedeutet, dass der vom Prozess verwendete Arbeitsspeicher durch physischen Speicher oder weniger häufig durch Auslagerungsdateien gesichert wird. Die zuvor reservierten Speicheradressen werden jetzt durch einen physischen Speicher gesichert. das heißt, dass sie zugeordnet sind. Wenn Gesperrte Seiten im Arbeitsspeicher aktiviert ist, verwendet SQL Server eine alternative Methode zum Zuweisen von Arbeitsspeicher, die AWE-API, und der Größte Teil des Arbeitsspeichers wird in diesem Leistungsindikator nicht widergespiegelt. Informationen zu diesen Zuordnungen finden Sie unter [Zugeordnete Seiten](#Locked Zugeordnete Seiten). Weitere Informationen finden Sie unter VirtualAlloc(), MEM_COMMIT.

  • Zugeordnete Seiten: Dieser Wert zeigt die Gesamtzahl der Speicherseiten an, die von SQL Server Datenbank-Engine zugeordnet werden.

  • Zugeordnete gesperrte Seiten: Dieser Wert stellt die Arbeitsspeichermenge in Kilobyte (KB) dar, die SQL Server mithilfe der AWE-API im physischen RAM zugeordnet und gesperrt hat. Es gibt an, wie viel Arbeitsspeicher SQL Server aktiv verwendet und angefordert hat, im Arbeitsspeicher zu bleiben, um die Leistung zu optimieren. Durch das Sperren von Seiten im Arbeitsspeicher stellt SQL Server sicher, dass wichtige Datenbankseiten sofort verfügbar sind und nicht auf den Datenträger getauscht werden. Weitere Informationen finden Sie unter Adressspeicher für Windows-Erweiterungen (AWE). Der Wert 0 (null) gibt an, dass das Feature "gesperrte Seiten im Arbeitsspeicher" derzeit deaktiviert ist und SQL Server stattdessen virtuellen Speicher verwendet. In einem solchen Fall stellt der Vm Commit-Wert den Arbeitsspeicher dar, der SQL Server zugeordnet ist.

  • Zugeordnete große Seiten: Dieser Wert stellt die Menge an Arbeitsspeicher dar, die von SQL Server mit großen Seiten belegt wird. Große Seiten ist eine Speicherverwaltungsfunktion, die vom Betriebssystem bereitgestellt wird. Anstelle der Standardseitengröße (in der Regel 4 KB) verwendet dieses Feature eine größere Seitengröße, z. B. 2 MB oder 4 MB. Der Wert 0 (null) gibt an, dass das Feature nicht aktiviert ist. Weitere Informationen finden Sie unter Virtual Alloc(), MEM_LARGE_PAGES.

  • Ziel committet: Dieser Wert gibt die Zielmenge des Arbeitsspeichers an, die SQL Server committet haben soll, eine ideale Menge an Arbeitsspeicher, die SQL Server basierend auf der aktuellen Workload verbrauchen könnten.

  • Aktueller Commit: Dieser Wert gibt die Menge des Arbeitsspeichers des Betriebssystems (in KB) an, für die SQL Server Speicher-Manager derzeit ein Commit ausgeführt hat (zugeordnet im physischen Speicher). Dieser Wert enthält entweder "gesperrte Seiten im Arbeitsspeicher" (AWE-API) oder virtuellen Speicher. Aus diesem Grund ist dieser Wert nahe oder identisch mit vm committeten oder gesperrten Seiten zugeordnet. Beachten Sie, dass, wenn SQL Server die AWE-API verwendet, weiterhin ein Teil des Arbeitsspeichers vom Virtual Memory Manager des Betriebssystems zugewiesen wird und als VM committet angezeigt wird.

  • NUMA-Wachstumsphase: Dieser Wert gibt an, ob sich SQL Server derzeit in einer NUMA-Wachstumsphase befindet. Weitere Informationen zu diesem anfänglichen Hochfahren des Arbeitsspeichers, wenn NUMA-Knoten auf dem Computer vorhanden sind, finden Sie unter How It Works: SQL Server (NUMA Local, Foreign and Away Memory Blocks).

  • Fehler des letzten Betriebssystems: Dieser Wert zeigt den letzten Betriebssystemfehler an, der aufgetreten ist, als der Arbeitsspeicher auf dem System ausgelastet war. SQL Server zeichnet diesen Betriebssystemfehler auf und zeigt ihn in der Ausgabe an. Eine vollständige Liste der Betriebssystemfehler finden Sie unter Systemfehlercodes.

Arbeitsspeicherauslastung mit NUMA-Knoten

Auf den Abschnitt Speicher-Manager folgt eine Zusammenfassung der Arbeitsspeicherauslastung für jeden Speicherknoten. In einem NUMA-fähigen System (Non-Uniform Memory Access) gibt es einen entsprechenden Speicherknoteneintrag für jeden HARDWARE-NUMA-Knoten. In einem SMP-System gibt es einen einzelnen Speicherknoteneintrag. Das gleiche Muster wird auf andere Speicherabschnitte angewendet.

Memory node Id = 0      KB
----------------------- -----------
VM Reserved             21289792
VM Committed            272808
Locked Pages Allocated  0
Pages Allocated         168904
Pages Free              3040
Target Committed        6664712
Current Committed       272808
Foreign Committed       0
Away Committed          0
Taken Away Committed    0

Hinweis

  • Der Memory node Id Wert entspricht möglicherweise nicht der Hardwareknoten-ID.
  • Diese Werte zeigen den Arbeitsspeicher an, der von Threads belegt wird, die auf diesem NUMA-Knoten ausgeführt werden. Bei diesen Werten handelt es sich nicht um den lokalen Speicher des NUMA-Knotens.
  • Die Summen der Reservierten VM-Werte und der VM Committed-Werte auf allen Speicherknoten sind etwas kleiner als die entsprechenden Werte, die in der Memory Manager-Tabelle gemeldet werden.
  • NUMA-Knoten 64 (Knoten 64) ist für die DAC reserviert und für die Arbeitsspeicheruntersuchung selten von Interesse, da für diese Verbindung begrenzte Arbeitsspeicherressourcen verwendet werden. Weitere Informationen zur dedizierten Administratorverbindung (Dedicated Administrator Connection, DAC) finden Sie unter Diagnoseverbindung für Datenbankadministratoren.

In der folgenden Liste werden Werte in der Ausgabetabelle und ihre Beschreibungen erläutert:

  • Reservierter virtueller Computer: Zeigt den virtuellen Adressraum (VAS) an, der von Threads reserviert ist, die auf diesem Knoten ausgeführt werden.
  • VM Committet: Zeigt die VAS an, die von Threads committet wird, die auf diesem Knoten ausgeführt werden.

Aggregieren von Arbeitsspeicher

Die folgende Tabelle enthält aggregierte Speicherinformationen für jeden Clerk-Typ und NUMA-Knoten. Für ein NUMA-fähiges System wird möglicherweise eine Ausgabe angezeigt, die der folgenden ähnelt:

MEMORYCLERK_SQLGENERAL (node 0) KB
------------------------------  --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 5416

MEMORYCLERK_SQLGENERAL (node 1) KB
------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 136

MEMORYCLERK_SQLGENERAL (Total)  KB
------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 5552

Der Wert von Pages Allocated zeigt die Gesamtanzahl der Speicherseiten an, die von einer bestimmten Komponente (Memory Clerk, Userstore, Objectstore oder Cachespeicher) zugeordnet werden.

Hinweis

Diese Knoten-IDs entsprechen der NUMA-Knotenkonfiguration des Computers, auf dem SQL Server ausgeführt wird. Die Knoten-IDs enthalten mögliche SOFTWARE-NUMA-Knoten, die auf hardwarebasierten NUMA-Knoten oder auf einem SMP-System definiert sind. Informationen zum Ermitteln der Zuordnung zwischen Knoten-IDs und CPUs für jeden Knoten finden Sie unter Informationsereignis-ID 17152. Dieses Ereignis wird im Anwendungsprotokoll in Ereignisanzeige protokolliert, wenn Sie SQL Server starten.

Für ein SMP-System wird nur eine Tabelle für jeden Clerk-Typ angezeigt, wobei knoten = 64, die von der DAC verwendet werden, nicht berücksichtigt wird. Diese Tabelle ähnelt dem folgenden Beispiel.

MEMORYCLERK_SQLGENERAL (Total)     KB
--------------------------------- --------------------
VM Reserved                        0
VM Committed                       0
AWE Allocated                      0
SM Reserved                        0
SM Commited                        0
Pages Allocated                    2928

Weitere Informationen in diesen Tabellen enthalten den freigegebenen Speicher:

  • SM Reserved ( RESERVIERTE SM): Zeigt die VAS an, die von allen Clerks dieser Art reserviert ist, die die API für speicherabbildende Dateien verwenden. Diese API wird auch als freigegebener Arbeitsspeicher bezeichnet.
  • SM Committet: Zeigt die VAS an, die von allen Clerks dieser Art committet wird, die die API für Speicherabbilddateien verwenden.

Als alternative Methode können Sie zusammenfassungsinformationen für jeden Clerk-Typ für alle Speicherknoten abrufen, indem Sie die sys.dm_os_memory_clerks dynamische Verwaltungssicht (Dynamic Management View, DMV) verwenden. Führen Sie dazu die folgende Abfrage aus:

SELECT
  TYPE,
  SUM(virtual_memory_reserved_kb) AS [VM Reserved],
  SUM(virtual_memory_committed_kb) AS [VM Committed],
  SUM(awe_allocated_kb) AS [AWE Allocated],
  SUM(shared_memory_reserved_kb) AS [SM Reserved],
  SUM(shared_memory_committed_kb) AS [SM Committed],
  -- SUM(multi_pages_kb) AS [MultiPage Allocator],          /*Applies to: SQL Server 2008   (10.0.x) through SQL Server 2008 R2 (10.50.x).*/
  -- SUM(single_pages_kb) AS [SinlgePage Allocator],        /*Applies to: SQL Server 2008   (10.0.x) through SQL Server 2008 R2 (10.50.x).*/
  SUM(pages_kb) AS [Page Allocated]                      /*Applies to: SQL Server 2012 (11.  x) and later.*/
FROM sys.dm_os_memory_clerks
GROUP BY TYPE

Pufferpooldetails

Dies ist ein wichtiger Abschnitt, der eine Aufschlüsselung der verschiedenen Statusdaten- und Indexseiten innerhalb des Pufferpools enthält, der auch als Datencache bezeichnet wird. Die folgende Ausgabetabelle enthält Details zum Pufferpool und andere Informationen.

Buffer Pool                                       Pages
------------------------------------------------- ---------
Database                                          5404
Simulated                                         0
Target                                            16384000
Dirty                                             298
In IO                                             0
Latched                                           0
IO error                                          125
In Internal Pool                                  0
Page Life Expectancy                              3965

In der folgenden Liste werden Werte in der Ausgabe und ihre Beschreibungen erläutert:

  • Datenbank: Zeigt die Anzahl der Puffer (Seiten) mit Datenbankinhalt (Daten- und Indexseiten) an.
  • Ziel: Zeigt die Zielgröße des Pufferpools (Pufferanzahl) an. Weitere Informationen finden Sie unter Zielarbeitsspeicher in den vorherigen Abschnitten dieses Artikels.
  • Dirty: Zeigt die Seiten an, die Datenbankinhalte enthalten und geändert wurden. Diese Puffer enthalten Änderungen, die in der Regel durch den Prüfpunktprozess auf den Datenträger geleert werden müssen.
  • In E/A: Zeigt die Puffer an, die auf einen ausstehenden E/A-Vorgang warten. Dies bedeutet, dass der Inhalt dieser Seiten entweder in den Speicher geschrieben oder aus diesem gelesen wird.
  • Latched( Latched): Zeigt die gelatchesten Puffer an. Ein Puffer wird verriegelt, wenn ein Thread den Inhalt einer Seite liest oder ändert. Ein Puffer wird auch verriegelt, wenn die Seite vom Datenträger gelesen oder auf den Datenträger geschrieben wird. Ein Latch wird verwendet, um die physische Konsistenz der Daten auf der Seite beizubehalten, während sie gelesen oder geändert werden. Im Gegensatz dazu wird eine Sperre verwendet, um die logische und transaktionsale Konsistenz aufrechtzuerhalten.
  • E/A-Fehler: Zeigt die Anzahl der Puffer an, bei denen möglicherweise E/A-bezogene Betriebssystemfehler aufgetreten sind (dies weist nicht unbedingt auf ein Problem hin).
  • Seitenlebenserwartung: Dieser Leistungsindikator misst die Zeitspanne in Sekunden, die die älteste Seite im Pufferpool geblieben ist.

Sie können ausführliche Informationen zum Pufferpool für Datenbankseiten abrufen, indem Sie die sys.dm_os_buffer_descriptors DMV verwenden. Verwenden Sie diese DMV jedoch mit Vorsicht, da sie sehr lange ausgeführt werden kann und eine große Ausgabe erzeugen kann, wenn Ihr SQL Server-basierter Server über viel RAM verfügen darf.

Plancache

In diesem Abschnitt wird der Plancache erläutert, der zuvor als Prozedurcache bezeichnet wurde.

Procedure Cache         Value
----------------------- -----------
TotalProcs              4
TotalPages              25
InUsePages              0

In der folgenden Liste werden Werte in der Ausgabe und ihre Beschreibungen erläutert:

  • TotalProcs: Dieser Wert zeigt die Gesamtzahl der zwischengespeicherten Objekte an, die sich derzeit im Prozedurcache befinden. Dieser Wert entspricht der Anzahl der Einträge in der sys.dm_exec_cached_plans DMV.

    Hinweis

    Aufgrund der dynamischen Natur dieser Informationen ist die Übereinstimmung möglicherweise nicht genau. Sie können PerfMon verwenden, um die SQL Server: Plan Cache-Objekt und die sys.dm_exec_cached_plans DMV zu überwachen, um detaillierte Informationen zum Typ der zwischengespeicherten Objekte zu erhalten, z. B. Trigger, Prozeduren und Ad-hoc-Objekte.

  • TotalPages: Zeigt die kumulativen Seiten an, die zum Speichern aller zwischengespeicherten Objekte im Plan- oder Prozedurcache verwendet werden. Sie können diese Zahl mit 8 KB multiplizieren, um den in KB ausgedrückten Wert abzurufen.

  • InUsePages: Zeigt die Seiten im Prozedurcache an, die zu derzeit aktiven Prozeduren gehören. Diese Seiten können nicht verworfen werden.

Globale Speicherobjekte

Dieser Abschnitt enthält Informationen zu verschiedenen globalen Speicherobjekten und der menge des verwendeten Arbeitsspeichers.

Global Memory Objects               Buffers
----------------------------------  ----------------
Resource                            576
Locks                               96
XDES                                61
DirtyPageTracking                   52
SETLS                               8
SubpDesc Allocators                 8
SE SchemaManager                    139
SE Column Metadata Cache            159
SE Column Metadata Cache Store      2
SE Column Store Metadata Cache      8
SQLCache                            224
Replication                         2
ServerGlobal                        1509
XP Global                           2
SortTables                          3

In der folgenden Liste werden Werte in der Ausgabe und ihre Beschreibungen erläutert:

  • Ressource: Zeigt den Arbeitsspeicher an, den das Resource-Objekt verwendet. Es wird von der Speicher-Engine für verschiedene serverweite Strukturen verwendet.
  • Sperren: Zeigt den vom Sperr-Manager verwendeten Arbeitsspeicher an.
  • XDES: Zeigt den vom Transaktions-Manager verwendeten Arbeitsspeicher an.
  • SETLS: Zeigt den Arbeitsspeicher an, der zum Zuordnen der threadspezifischen Speicher-Engine-Struktur verwendet wird, die lokalen Threadspeicher (TLS) verwendet. Weitere Informationen finden Sie unter Thread Local Storage.
  • SubpDesc-Zuweisungen: Zeigt den Arbeitsspeicher an, der zum Verwalten von Unterprozessen für parallele Abfragen, Sicherungsvorgänge, Wiederherstellungsvorgänge, Datenbankvorgänge, Dateivorgänge, Spiegelung und asynchrone Cursor verwendet wird. Diese Unterprozesse werden auch als "parallele Prozesse" bezeichnet.
  • SE SchemaManager: Zeigt den Arbeitsspeicher an, den der Schema-Manager zum Speichern von Speichermodul-spezifischen Metadaten verwendet.
  • SQLCache: Zeigt den Arbeitsspeicher an, der zum Speichern des Texts von Ad-hoc- und vorbereiteten Anweisungen verwendet wird.
  • Replikation: Zeigt den Arbeitsspeicher an, den der Server für interne Replikationssubsysteme verwendet.
  • ServerGlobal: Zeigt das globale Serverspeicherobjekt an, das generisch von mehreren Subsystemen verwendet wird.
  • XP Global: Zeigt den Arbeitsspeicher an, der von den erweiterten gespeicherten Prozeduren verwendet wird.
  • SortTables: Zeigt den von den Sortiertabellen verwendeten Arbeitsspeicher an.

Abfragen von Speicherobjekten

In diesem Abschnitt werden Informationen zur Abfragespeicherzuweisung beschrieben. Es enthält auch eine Momentaufnahme der Speicherauslastung der Abfrage. Abfragespeicher wird auch als "Arbeitsbereichsspeicher" bezeichnet.

Query Memory Objects (default)           Value
---------------------------------------- -------
Grants                                    0
Waiting                                   0
Available                                 436307
Current Max                               436307
Future Max                                436307
Physical Max                              436307
Next Request                              0
Waiting For                               0
Cost                                      0
Timeout                                   0
Wait Time                                 0

Wenn die Größe und die Kosten einer Abfrage die Schwellenwerte für den "kleinen" Abfragearbeitsspeicher erfüllen, wird die Abfrage in einer kleinen Abfragewarteschlange platziert. Dieses Verhalten verhindert, dass kleinere Abfragen hinter größeren Abfragen verzögert werden, die sich bereits in der Warteschlange befinden.

In der folgenden Liste werden Werte in der Ausgabe und ihre Beschreibungen erläutert:

  • Zuweisungen: Zeigt die Anzahl der ausgeführten Abfragen mit Speicherzuweisungen an.
  • Warten: Zeigt die Anzahl der Abfragen an, die auf den Erhalt von Speicherzuweisungen warten.
  • Verfügbar: Zeigt die Puffer an, die für Abfragen zur Verwendung als Hasharbeitsbereich und Sortierarbeitsbereich verfügbar sind. Der Available Wert wird in regelmäßigen Abständen aktualisiert.
  • Nächste Anforderung: Zeigt die Arbeitsspeicheranforderungsgröße in Puffern für die nächste wartende Abfrage an.
  • Warten auf: Zeigt die Menge an Arbeitsspeicher an, die verfügbar sein muss, um die Abfrage auszuführen, auf die sich der Wert nächste Anforderung bezieht. Der Wert Waiting For ist der Next Request Mit einem Headroom-Faktor multiplizierte Wert. Dieser Wert garantiert effektiv, dass eine bestimmte Menge an Arbeitsspeicher verfügbar ist, wenn die nächste wartende Abfrage ausgeführt wird.
  • Kosten: Zeigt die Kosten der nächsten wartenden Abfrage an.
  • Timeout: Zeigt das Timeout in Sekunden für die nächste wartende Abfrage an.
  • Wartezeit: Zeigt die verstrichene Zeit in Millisekunden an, seit die nächste wartenden Abfrage in die Warteschlange gestellt wurde.
  • Aktueller Höchstwert: Zeigt das allgemeine Arbeitsspeicherlimit für die Abfrageausführung an. Dieser Wert ist der kombinierte Grenzwert für die große Abfragewarteschlange und die kleine Abfragewarteschlange.

Weitere Informationen dazu, was Speicherzuweisungen sind, was diese Werte bedeuten und wie Sie Speicherzuweisungen behandeln, finden Sie unter Behandeln von Problemen mit langsamer Leistung oder unzureichendem Arbeitsspeicher, die durch Speicherzuweisungen in SQL Server verursacht werden.

Optimierung des Arbeitsspeichers

Abfragen werden zur Kompilierung an den Server übermittelt. Der Kompilierungsprozess umfasst Analyse, Algebraisierung und Optimierung. Abfragen werden basierend auf dem Arbeitsspeicher klassifiziert, den jede Abfrage während des Kompilierungsvorgangs verbraucht.

Hinweis

Dieser Betrag enthält nicht den Arbeitsspeicher, der zum Ausführen der Abfrage erforderlich ist.

Wenn eine Abfrage gestartet wird, gibt es keine Beschränkung für die Anzahl der Abfragen, die kompiliert werden können. Wenn der Arbeitsspeicherverbrauch zunimmt und einen Schwellenwert erreicht, muss die Abfrage ein Gateway übergeben, um fortzufahren. Nach jedem Gateway gibt es einen zunehmend abnehmenden Grenzwert für gleichzeitig kompilierte Abfragen. Die Größe der einzelnen Gateways hängt von der Plattform und der Last ab. Gatewaygrößen werden ausgewählt, um Skalierbarkeit und Durchsatz zu maximieren.

Wenn die Abfrage ein Gateway nicht übergeben kann, wartet sie, bis Arbeitsspeicher verfügbar ist, oder gibt einen Timeoutfehler zurück (Fehler 8628). Darüber hinaus ruft die Abfrage möglicherweise kein Gateway ab, wenn Sie die Abfrage abbrechen oder ein Deadlock erkannt wird. Wenn die Abfrage mehrere Gateways übergibt, werden die kleineren Gateways erst freigegeben, wenn der Kompilierungsprozess abgeschlossen ist.

Dieses Verhalten lässt nur wenige speicherintensive Kompilierungen gleichzeitig zu. Darüber hinaus maximiert dieses Verhalten den Durchsatz für kleinere Abfragen.

Die nächste Tabelle enthält Details zu Arbeitsspeicherwartevorgängen, die aufgrund von unzureichendem Arbeitsspeicher für die Abfrageoptimierung auftreten. Der interne Speicher ist für den Optimiererspeicher, der von Systemabfragen verwendet wird, während der Standard optimierungsspeicher für Benutzer- oder Anwendungsabfragen meldet.

Optimization Queue (internal)      Value
---------------------------------- ----------------
Overall Memory                     4013162496
Target Memory                      3673882624
Last Notification                  1
Timeout                            6
Early Termination Factor           5

Small Gateway (internal)           Value
---------------------------------- ----------------
Configured Units                   32
Available Units                    32
Acquires                           0
Waiters                            0
Threshold Factor                   380000
Threshold                          380000

Medium Gateway (internal)          Value
---------------------------------- ----------------
Configured Units                   8
Available Units                    8
Acquires                           0
Waiters                            0
Threshold Factor                   12
Threshold                          -1

Big Gateway (internal)             Value
---------------------------------- ----------------
Configured Units                   1
Available Units                    1
Acquires                           0
Waiters                            0
Threshold Factor                   8
Threshold                          -1

Optimization Queue (default)       Value
---------------------------------- ----------------
Overall Memory                     4013162496
Target Memory                      3542319104
Last Notification                  1
Timeout                            6
Early Termination Factor           5

Small Gateway (default)            Value
---------------------------------- ----------------
Configured Units                   32
Available Units                    32
Acquires                           0
Waiters                            0
Threshold Factor                   380000
Threshold                          380000

Medium Gateway (default)           Value
---------------------------------- ----------------
Configured Units                   8
Available Units                    8
Acquires                           0
Waiters                            2
Threshold Factor                   12
Threshold                          -1

Big Gateway (default)              Value
---------------------------------- ----------------
Configured Units                   1
Available Units                    1
Acquires                           0
Waiters                            0
Threshold Factor                   8
Threshold                          -1

Hier finden Sie eine Beschreibung einiger dieser Werte:

  • Konfigurierte Einheiten : Gibt die Anzahl gleichzeitiger Abfragen an, die den Kompilierungsspeicher des Gateways verwenden können. In diesem Beispiel können 32 gleichzeitige Abfragen Arbeitsspeicher aus dem kleinen Gateway (Standard), acht gleichzeitige Abfragen vom mittleren Gateway und eine Abfrage vom Großen Gateway verwenden. Wie bereits erwähnt, wird eine Abfrage, wenn mehr Arbeitsspeicher benötigt, als das kleine Gateway zuordnen kann, an das mittlere Gateway weitergeleitet, und diese Abfrage wird als Einheit in beiden Gateways gezählt. Je größer der Kompilierungsspeicher ist, den eine Abfrage benötigt, desto weniger konfigurierte Einheiten in einem Gateway.
  • Verfügbare Einheiten : Gibt die Anzahl der Slots oder Einheiten an, die für gleichzeitige Abfragen verfügbar sind, die aus der Liste der konfigurierten Einheiten kompiliert werden sollen. Wenn beispielsweise 32 Einheiten verfügbar sind, aber derzeit drei Abfragen Kompilierungsspeicher verwenden, Available Units wären 32 minus 3 oder 29 Einheiten.
  • Acquires : Gibt die Anzahl der Einheiten oder Slots an, die von zu kompilierenden Abfragen abgerufen wurden. Wenn derzeit drei Abfragen Arbeitsspeicher von einem Gateway verwenden, wird "Acquires = 3" verwendet.
  • Kellner : Gibt an, wie viele Abfragen auf kompilierungsspeicher in einem Gateway warten. Wenn alle Einheiten in einem Gateway erschöpft sind, ist der Waiters-Wert ungleich 0 (null), der die Anzahl der wartenden Abfragen anzeigt.
  • Schwellenwert : Gibt einen Grenzwert für den Gatewayspeicher an, der bestimmt, woher eine Abfrage ihren Arbeitsspeicher abruft oder in welchem Gateway sie sich befindet. Wenn eine Abfrage nicht mehr als den Schwellenwert benötigt, bleibt sie im kleinen Gateway (eine Abfrage beginnt immer mit dem kleinen Gateway). Wenn mehr Arbeitsspeicher für die Kompilierung benötigt wird, wird er in den mittleren Speicher übergehen, und wenn dieser Schwellenwert immer noch nicht ausreicht, wird er an das große Gateway übergehen. Für das kleine Gateway beträgt der Schwellenwertfaktor 380.000 Bytes (kann in zukünftigen Versionen geändert werden) für die x64-Plattform.
  • Schwellenwertfaktor: Bestimmt den Schwellenwert für jedes Gateway. Da der Schwellenwert für das kleine Gateway vordefiniert ist, wird der Faktor ebenfalls auf denselben Wert festgelegt. Die Schwellenwertfaktoren für das mittlere und große Gateway sind Bruchteile des gesamten Optimiererspeichers (Gesamtarbeitsspeicher in der Optimierungswarteschlange) und sind auf 12 bzw. 8 festgelegt. Wenn also der Gesamtspeicher angepasst wird, weil andere SQL Server Speicherverbraucher Arbeitsspeicher benötigen, würden die Schwellenwertfaktoren dazu führen, dass auch die Schwellenwerte dynamisch angepasst werden.
  • Timeout: Gibt den Wert in Minuten an, der definiert, wie lange eine Abfrage auf den Optimiererspeicher wartet. Wenn dieser Timeoutwert erreicht wird, wartet die Sitzung nicht mehr und löst den Fehler 8628 aus: A time out occurred while waiting to optimize the query. Rerun the query.

Speicherbroker

Dieser Abschnitt enthält Informationen zu Speicherbrokern, die zwischengespeicherten Arbeitsspeicher, gestohlenen Und reservierten Arbeitsspeicher steuern. Sie können die Informationen in diesen Tabellen nur für interne Diagnose verwenden. Daher sind diese Informationen nicht detailliert.

MEMORYBROKER_FOR_CACHE (internal)       Value
--------------------------------------- -------------
Allocations                             20040
Rate                                    0
Target Allocations                      3477904
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_STEAL (internal)       Value
--------------------------------------- -------------
Allocations                             129872
Rate                                    40
Target Allocations                      3587776
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_RESERVE (internal)     Value
--------------------------------------- -------------
Allocations                             0
Rate                                    0
Target Allocations                      3457864
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_CACHE (default)        Value
--------------------------------------- -------------
Allocations                             44592
Rate                                    8552
Target Allocations                      3511008
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_STEAL (default)        Value
--------------------------------------- -------------
Allocations                             1432
Rate                                    -520
Target Allocations                      3459296
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_RESERVE (default)      Value
--------------------------------------- -------------
Allocations                             0
Rate                                    0
Target Allocations                      3919104
Future Allocations                      872608
Overall                                 3919104
Last Notification                       1