Verwenden des BEFEHLS "DBCC MEMORYSTATUS" zum Überwachen der 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 Speicherstatus von Microsoft SQL Server und dem Betriebssystem bereit. Es stellt eine der detailliertesten Ausgaben der Speicherverteilung und -verwendung in SQL Server bereit. Sie können die Ausgabe verwenden, um Probleme mit der Arbeitsspeichernutzung in SQL Server zu beheben oder um bestimmte Fehler außerhalb des Arbeitsspeichers zu beheben. Viele Nichtspeicherfehler generieren diese Ausgabe automatisch im Fehlerprotokoll. Wenn ein Fehler auftritt, der sich auf einen Zustand mit geringem Arbeitsspeicher bezieht, können Sie den DBCC MEMORYSTATUS
Befehl ausführen und die Ausgabe bereitstellen, wenn Sie sich an Microsoft-Support wenden.
Die Ausgabe des DBCC MEMORYSTATUS
Befehls enthält Abschnitte für die Speicherverwaltung, speicherauslastung, aggregierte Speicherinformationen, Pufferpoolinformationen und Prozedurcacheinformationen. Außerdem wird die Ausgabe globaler Speicherobjekte, Abfragespeicherobjekte, Optimierung und Speicherbroker beschrieben.
Notiz
Leistungsmonitor (PerfMon) und Task-Manager berücksichtigen keine vollständige Speicherauslastung, wenn die Die Option "Gesperrte Seiten" im Arbeitsspeicher ist aktiviert. Es gibt keine Leistungsindikatoren, die die Speicherauslastung der Adressfenstererweiterungen (Address Windowing Extensions, AWE) anzeigen.
Wichtig
Der DBCC MEMORYSTATUS
Befehl ist ein Diagnosetool für Microsoft-Support. Das Format der Ausgabe und der bereitgestellten Detailebene können zwischen Service Packs und Produktversionen geändert werden. Die vom Befehl bereitgestellten DBCC MEMORYSTATUS
Funktionen können durch einen anderen Mechanismus in späteren Produktversionen ersetzt werden. Daher funktioniert dieser Befehl in späteren Produktversionen möglicherweise nicht mehr. Es werden keine zusätzlichen Warnungen bereitgestellt, 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 wurde von 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 MEMORYSTATUS
wird in der Regel verwendet, um Probleme mit geringem Arbeitsspeicher zu untersuchen, die von SQL Server gemeldet werden. Geringer Arbeitsspeicher kann auftreten, wenn entweder externer Speicherdruck außerhalb des SQL Server-Prozesses oder interner Druck auftritt, der innerhalb des Prozesses entsteht. Interner Druck kann durch das SQL Server-Datenbankmodul oder durch andere Komponenten verursacht werden, die innerhalb des Prozesses ausgeführt werden (z. B. verknüpfte Server, XPs, SQLCLR, Angriffsschutz oder Antivirensoftware). Weitere Informationen zum Beheben des Arbeitsspeicherdrucks finden Sie unter "Problembehandlung bei nicht genügend Arbeitsspeicher" oder "Geringem Arbeitsspeicher" in SQL Server.
Hier sind die allgemeinen Schritte für die Verwendung des Befehls und die Interpretation der Ergebnisse. Für bestimmte Szenarien ist es u. U. erforderlich, dass Sie die Ausgabe etwas anders angehen, aber der allgemeine Ansatz wird hier beschrieben.
- Führen Sie den Befehl
DBCC MEMORYSTATUS
aus. - Verwenden Sie die Abschnitte "Prozess-/Systemanzahl " und "Speicher-Manager ", um festzustellen, ob ein externer Arbeitsspeicherdruck besteht (z. B. der Computer ist auf physischem oder virtuellem Arbeitsspeicher niedrig, oder der SQL Server-Arbeitssatz wird ausgelagert). Verwenden Sie außerdem diese Abschnitte, um zu bestimmen, wie viel Arbeitsspeicher das SQL Server-Datenbankmodul im Vergleich zum gesamten Arbeitsspeicher des Systems zugewiesen hat.
- Wenn Sie feststellen, dass ein externer Arbeitsspeicherdruck besteht, versuchen Sie, die Speicherauslastung durch andere Anwendungen und das Betriebssystem zu verringern, oder fügen Sie mehr RAM hinzu.
- Wenn Sie feststellen, dass das SQL Server-Modul den größten Teil des Arbeitsspeichers verwendet (interner Speicherdruck), können Sie die verbleibenden Abschnitte
DBCC MEMORYSTATUS
verwenden, um zu ermitteln, welche Komponenten (Speicherkaufmann, Cachestore, UserStore oder Objectstore) der größte Mitwirkender für diese Speicherauslastung sind. - Untersuchen Sie die einzelnen Komponenten:
MEMORYCLEARK
,CACHESTORE
, ,USERSTORE
undOBJECTSTORE
. Überprüfen Sie den zugewiesenen Seitenwert, um zu bestimmen, wie viel Arbeitsspeicher diese Komponente innerhalb von SQL Server verbraucht. Eine kurze Beschreibung der meisten Arbeitsspeicherkomponenten des Datenbankmoduls finden Sie in der Tabelle "Memory Clerk".For a brief description of most database engine memory memory components, see the Memory Clerk types table.- In seltenen Fällen handelt es sich bei der Zuordnung um eine direkte virtuelle Zuordnung, anstatt den SQL Server-Speicher-Manager zu durchlaufen. Untersuchen Sie in diesen Fällen den Wert für den vm-Commit unter der spezifischen Komponente anstelle der zugewiesenen Seiten.
- Wenn Ihr Computer NUMA verwendet, werden einige Speicherkomponenten pro Knoten aufgeteilt. Sie können z. B. einen Summenwert jedes Knotens beobachten
OBJECTSTORE_LOCK_MANAGER (node 0)
OBJECTSTORE_LOCK_MANAGER (node 1)
, uswOBJECTSTORE_LOCK_MANAGER (node 2)
. beobachten und schließlich einen Summenwert jedes Knotens beobachtenOBJECTSTORE_LOCK_MANAGER (Total)
. Der beste Ausgangspunkt ist der Abschnitt, in dem der Gesamtwert gemeldet wird, und dann die Aufschlüsselung nach Bedarf untersuchen. Weitere Informationen finden Sie unter "Arbeitsspeichernutzung mit NUMA-Knoten".
- Einige Abschnitte enthalten
DBCC MEMORYSTATUS
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 Zuordnungen innerhalb eines Speicherkaufmanns anzuzeigen. Beispiele für solche Abschnitte sind Pufferpool (Daten und Indexcache), Prozedurcache-Cache/Plancache, Abfragespeicherobjekte (Speichererteilungen), Optimierungswarteschlange und kleine und mittlere und große Gateways (Optimiererspeicher). Wenn Sie bereits wissen, dass eine bestimmte Komponente des Arbeitsspeichers in SQL Server die Quelle des Arbeitsspeicherdrucks ist, sollten Sie direkt zu diesem bestimmten Abschnitt wechseln. Wenn Sie beispielsweise eine andere Art und Weise eingerichtet haben, dass es eine hohe Speicherauslastung gibt, die Speicherfehler verursacht, können Sie den Abschnitt "Speicherobjekte abfragen" überprüfen.
Im restlichen Teil 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 deren Beschreibungen erläutert:
- Verfügbarer physischer Speicher: Dieser Wert zeigt die Gesamtmenge des freien Arbeitsspeichers auf dem Computer an. Im Beispiel beträgt der freie Arbeitsspeicher 5.060.247.552 Bytes.
- Verfügbarer virtueller Speicher: Dieser Wert zeigt die Gesamtmenge des freien virtuellen Arbeitsspeichers für den SQL Server-Prozess auf 140.710.048.014.336 Byte (128 TB). Weitere Informationen finden Sie unter Speicher- und Adressraumbeschränkungen.
- Verfügbare Auslagerungsdatei: Dieser Wert zeigt den freien Auslagerungsdateispeicher an. Im Beispiel beträgt der Wert 7.066.804.224 Bytes.
- Arbeitssatz: Dieser Wert zeigt die Gesamtmenge des virtuellen Arbeitsspeichers an, den der SQL Server-Prozess in RAM (nicht ausgelagert) hat, beträgt 430.026.752 Byte.
- Prozentsatz des zugesicherten Arbeitsspeichers in WS: Dieser Wert zeigt an, in welchem Prozent der mit SQL Server zugewiesenen virtuellen Arbeitsspeicher im RAM (oder im Arbeitssatz) gespeichert ist. Der Wert von 100 Prozent zeigt, dass der gesamte zugesicherte Speicher im RAM gespeichert ist und 0 Prozent davon ausgelagert werden.
- Seitenfehler: Dieser Wert zeigt die Gesamtmenge der harten und weichen Seitenfehler für den SQL Server an. Im Beispiel ist der Wert 151.138.
Die verbleibenden vier Werte sind binär oder boolesch.
- Der physische Systemspeicher mit hohem Wert von 1 gibt an, dass SQL Server den verfügbaren physischen Speicher auf dem Computer hoch hält. Aus diesem Grund ist der Wert des physischen Systemspeichers niedrig 0, was bedeutet, dass kein geringer Arbeitsspeicher vorhanden ist. Ähnliche Logik wird auf den prozess physischen Speicher niedrig und den virtuellen Prozessspeicher niedrig angewendet, wobei 0 bedeutet, dass sie falsch ist, und 1 bedeutet, dass sie wahr ist. In diesem Beispiel sind beide Werte 0, was bedeutet, dass es viel physischen und virtuellen Speicher für den SQL Server-Prozess gibt.
Speicher-Manager
Dieser Abschnitt enthält eine Beispielausgabe des Speicher-Managers, die den gesamtspeicherverbrauch von 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 deren Beschreibungen erläutert:
VM Reserviert: Dieser Wert zeigt die Gesamtmenge des virtuellen Adressraums (VAS) oder des virtuellen Speichers (VM), den SQL Server reserviert hat. Die Reservierung des virtuellen Speichers verwendet tatsächlich keinen physischen Speicher; es bedeutet einfach, dass virtuelle Adressen von der großen VAS abgesehen werden. Weitere Informationen finden Sie unter VirtualAlloc(), MEM_RESERVE.
VM Commit: Dieser Wert zeigt die Gesamtmenge des virtuellen Arbeitsspeichers (VM) an, die SQL Server (in KB) zugesichert hat. Dies bedeutet, dass der vom Prozess verwendete Speicher durch physischen Speicher oder weniger häufig durch Seitendatei gesichert wird. Die zuvor reservierten Speicheradressen werden jetzt durch einen physischen Speicher gesichert. d. h., sie werden zugewiesen. Wenn gesperrte Seiten im Arbeitsspeicher aktiviert sind, verwendet SQL Server eine alternative Methode zum Zuordnen von Arbeitsspeicher, AWE-API und den meisten Arbeitsspeicher wird in diesem Leistungsindikator nicht widergespiegelt. Diese Zuordnungen finden Sie unter [Gesperrte Seiten zugewiesen](#Locked zugewiesene Seiten). Weitere Informationen finden Sie unter VirtualAlloc(), MEM_COMMIT.
Zugewiesene Seiten: Dieser Wert zeigt die Gesamtanzahl der Speicherseiten an, die vom SQL Server-Datenbankmodul zugeordnet werden.
Zugewiesene gesperrte Seiten: Dieser Wert stellt die Speichermenge in Kilobyte (KB) dar, die SQL Server mithilfe der AWE-API in physischem RAM zugewiesen und gesperrt hat. Es gibt an, wie viel Arbeitsspeicher SQL Server aktiv verwendet und zur Optimierung der Leistung im Arbeitsspeicher gespeichert werden muss. Durch das Sperren von Seiten im Arbeitsspeicher stellt SQL Server sicher, dass wichtige Datenbankseiten sofort verfügbar sind und nicht auf den Datenträger ausgetauscht werden. Weitere Informationen finden Sie unter Adressspeicher für Windows-Erweiterungen (AWE). Ein Wert von Null gibt an, dass das Feature "Gesperrte Seiten im Arbeitsspeicher" derzeit deaktiviert ist und SQL Server stattdessen virtuellen Speicher verwendet. In einem solchen Fall würde der Wert für den virtuellen Computer zugesichert den Speicher darstellen, der SQL Server zugeordnet ist.
Große Seiten zugeordnet: Dieser Wert stellt die Vom SQL Server mit großen Seiten zugeordnete Arbeitsspeichermenge dar. Große Seiten sind ein Vom Betriebssystem bereitgestelltes Speicherverwaltungsfeature. Statt das Standardseitenformat (in der Regel 4 KB) zu verwenden, verwendet dieses Feature ein größeres Seitenformat, z. B. 2 MB oder 4 MB. Ein Wert von Null gibt an, dass das Feature nicht aktiviert ist. Weitere Informationen finden Sie unter Virtual Alloc(), MEM_LARGE_PAGES.
Ziel zugesichert: Dieser Wert gibt die Zielmenge des Arbeitsspeichers an, den SQL Server zugesichert haben soll, und eine ideale Menge an Arbeitsspeicher, den SQL Server basierend auf der letzten Arbeitsauslastung verbrauchen kann.
Aktueller Commit: Dieser Wert gibt die Menge des Arbeitsspeichers des Betriebssystems (in KB) an, den der SQL Server-Speicher-Manager derzeit zugesichert hat (im physischen Speicher zugewiesen). Dieser Wert enthält entweder "gesperrte Seiten im Arbeitsspeicher" (AWE-API) oder virtuellen Speicher. Daher ist dieser Wert nahe oder identisch mit dem zugesicherten oder gesperrten virtuellen Computer zugeordnete Seiten. Beachten Sie, dass beim Verwenden der AWE-API von SQL Server noch speichergebunden vom Virtuellen Speicher-Manager des Betriebssystems zugewiesen wird und als VM Commit übernommen wird.
NUMA-Wachstumsphase: Dieser Wert gibt an, ob SICH SQL Server derzeit in einer NUMA-Wachstumsphase befindet. Weitere Informationen zu diesem anfänglichen Speicherauflauf, wenn NUMA-Knoten auf dem Computer vorhanden sind, finden Sie unter How It Works: SQL Server (NUMA Local, Foreign and Away Memory Blocks).
Letzter Betriebssystemfehler: Dieser Wert zeigt den letzten Betriebssystemfehler an, der aufgetreten ist, wenn ein Speicherdruck auf dem System aufgetreten ist. SQL Server zeichnet diesen Betriebssystemfehler auf und zeigt ihn in der Ausgabe an. Eine vollständige Liste der Betriebssystemfehler finden Sie unter Systemfehlercodes.
Arbeitsspeichernutzung mit NUMA-Knoten
Auf den Abschnitt "Speicher-Manager" folgt eine Zusammenfassung der Speicherauslastung für jeden Speicherknoten. In einem nicht einheitlichen Speicherzugriff (NUMA) gibt es einen entsprechenden Speicherknoteneintrag für jeden Hardware-NUMA-Knoten. In einem SMP-System gibt es einen einzelnen Speicherknoteneintrag. Dasselbe 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
Notiz
- Der
Memory node Id
Wert entspricht möglicherweise nicht der Hardwareknoten-ID. - Diese Werte zeigen den Speicher an, der von Threads zugewiesen wird, die auf diesem NUMA-Knoten ausgeführt werden. Diese Werte sind nicht der lokale Speicher für den NUMA-Knoten.
- Die Summen der reservierten Vm-Werte und der vm Commit-Werte auf allen Speicherknoten sind etwas kleiner als die entsprechenden Werte, die in der Tabelle "Memory Manager" angegeben werden.
- NUMA Node 64 (Node 64) ist für DAC reserviert und ist selten für die Speicheruntersuchung interessant, da diese Verbindung begrenzte Speicherressourcen verwendet. Weitere Informationen zur dedizierten Administratorverbindung (DAC) finden Sie unter Diagnoseverbindung für Datenbankadministratoren.
In der folgenden Liste werden Werte in der Ausgabetabelle und deren Beschreibungen erläutert:
- VM Reserviert: Zeigt den virtuellen Adressraum (VAS) an, der von Threads reserviert ist, die auf diesem Knoten ausgeführt werden.
- VM Commit: Zeigt die VAS an, die von Threads, die auf diesem Knoten ausgeführt werden, zugesichert wird.
Aggregieren des Arbeitsspeichers
Die folgende Tabelle enthält aggregierte Speicherinformationen für jeden Mitarbeitertyp und NUMA-Knoten. Für ein NUMA-fähiges System wird möglicherweise eine Ausgabe angezeigt, die etwa wie folgt aussieht:
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 zeigt Pages Allocated
die Gesamtanzahl der Speicherseiten an, die einer bestimmten Komponente zugeordnet sind (Speicherkaufmann, Benutzerspeicher, Objektspeicher oder Cachespeicher).
Notiz
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 über Hardware NUMA-Knoten oder über einem SMP-System definiert sind. Informationen zum Ermitteln der Zuordnung zwischen Knoten-IDs und CPUs für jeden Knoten finden Sie unter Information Event ID 17152. Dieses Ereignis wird beim Starten von SQL Server im Anwendungsprotokoll Ereignisanzeige protokolliert.
Für ein SMP-System sehen Sie nur eine Tabelle für jeden Mitarbeitertyp, nicht zählt Knoten = 64, die von DAC verwendet werden. 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 beziehen sich auf gemeinsam genutzten Arbeitsspeicher:
- SM Reserved: Zeigt die VAS an, die von allen Sachbearbeitern dieser Art reserviert ist, die die api für speicherzuordnungen Dateien verwenden. Diese API wird auch als freigegebener Speicher bezeichnet.
- SM Commit: Zeigt die VAS an, die von allen Sachbearbeitern dieser Art übernommen wird, die die API mit speicherzuordnungen Dateien verwenden.
Als alternative Methode können Sie zusammenfassende Informationen für jeden Mitarbeitertyp für alle Speicherknoten mithilfe der sys.dm_os_memory_clerks dynamischen Verwaltungsansicht (DMV) abrufen. 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
Details des Pufferpools
Dies ist ein wichtiger Abschnitt, der eine Aufschlüsselung verschiedener Statusdaten und Indexseiten innerhalb des Pufferpools bereitstellt, auch als Datencache bezeichnet. In der folgenden Ausgabetabelle sind Details zum Pufferpool und anderen Informationen aufgeführt.
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 deren Beschreibungen erläutert:
- Datenbank: Zeigt die Anzahl der Puffer (Seiten) mit Datenbankinhalten (Daten und Indexseiten) an.
- Ziel: Zeigt die Zielgröße des Pufferpools an (Pufferanzahl). Siehe "Ziel zugesicherten Speicher" in den vorherigen Abschnitten dieses Artikels.
- Geändert: Zeigt die Seiten mit Datenbankinhalten an und wurde geändert. Diese Puffer enthalten Änderungen, die normalerweise vom 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 dem Speicher gelesen wird.
- Geriegelt: Zeigt die geriegelten Puffer an. Ein Puffer wird geriegelt, wenn ein Thread den Inhalt einer Seite liest oder ändert. Ein Puffer wird auch geriegelt, wenn die Seite vom Datenträger gelesen oder auf den Datenträger geschrieben wird. Ein Riegel wird verwendet, um die physische Konsistenz der Daten auf der Seite beizubehalten, während sie gelesen oder geändert wird. Im Gegensatz dazu wird eine Sperre verwendet, um logische und transaktionsale Konsistenz aufrechtzuerhalten.
- E/A-Fehler: Zeigt die Anzahl der Puffer an, die möglicherweise fehler im Zusammenhang mit dem E/A-Betriebssystem aufgetreten sind (dies weist nicht unbedingt auf ein Problem hin).
- Seitenlebensdauer: Dieser Indikator misst die Zeitspanne in Sekunden, die die älteste Seite im Pufferpool verbleibt.
Mit dem sys.dm_os_buffer_descriptors
DMV erhalten Sie detaillierte Informationen zum Pufferpool für Datenbankseiten. Verwenden Sie diesen DMV jedoch mit Vorsicht, da sie lange dauern und eine große Ausgabe erzeugen kann, wenn Ihr SQL Server-basierter Server über viel RAM verfügen darf.
Planen des Caches
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 deren Beschreibungen erläutert:
TotalProcs: Dieser Wert zeigt die gesamt 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.Notiz
Aufgrund der dynamischen Natur dieser Informationen ist die Übereinstimmung möglicherweise nicht genau. Sie können PerfMon verwenden, um das SQL Server: Plan Cache-Objekt und DMV
sys.dm_exec_cached_plans
auf detaillierte Informationen zum Typ von zwischengespeicherten Objekten zu überwachen, z. B. Trigger, Prozeduren und Ad-hoc-Objekte.TotalPages: Zeigt die kumulierten 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 KBs ausgedrückten Wert abzurufen.
InUsePages: Zeigt die Seiten im Prozedurcache an, die zu Prozeduren gehören, die derzeit aktiv sind. Diese Seiten können nicht verworfen werden.
Globale Speicherobjekte
Dieser Abschnitt enthält Informationen zu verschiedenen globalen Speicherobjekten und zur 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 deren Beschreibungen erläutert:
- Ressource: Zeigt den Arbeitsspeicher an, den das Resource-Objekt verwendet. Es wird vom Speichermodul für verschiedene serverweite Strukturen verwendet.
- Sperren: Zeigt den vom Sperr-Manager verwendeten Speicher an.
- XDES: Zeigt den vom Transaktions-Manager verwendeten Speicher an.
- SETLS: Zeigt den Speicher an, der zum Zuordnen der speichermodulspezifischen Pro-Thread-Struktur verwendet wird, die threadlokalen Speicher (TLS) verwendet. Weitere Informationen finden Sie unter Thread Local Storage.
- SubpDesc Allocators: Zeigt den Speicher 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 Speicher an, den Der Schema-Manager zum Speichern von speichermodulspezifischen Metadaten verwendet.
- SQLCache: Zeigt den Speicher an, der zum Speichern des Texts von Ad-hoc- und vorbereiteten Anweisungen verwendet wird.
- Replikation: Zeigt den Speicher 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 von den erweiterten gespeicherten Prozeduren verwendeten Arbeitsspeicher an.
- SortTables: Zeigt den von den Sortiertabellen verwendeten Arbeitsspeicher an.
Abfragen von Speicherobjekten
In diesem Abschnitt werden Informationen zur Abfragespeichererteilung beschrieben. Sie enthält auch eine Momentaufnahme der Speicherauslastung der Abfrage. Der 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 "kleine" Speicherschwellenwerte erfüllen, wird die Abfrage in eine kleine Abfragewarteschlange gesetzt. 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 deren Beschreibungen erläutert:
- Grants: Zeigt die Anzahl der ausgeführten Abfragen an, die Speichererteilungen aufweisen.
- Warten: Zeigt die Anzahl der Abfragen an, die warten, um Speichererteilungen zu erhalten.
- Verfügbar: Zeigt die Puffer an, die für Abfragen zur Verwendung als Hasharbeitsbereich und Sortierarbeitsbereich verfügbar sind. Der
Available
Wert wird regelmäßig aktualisiert. - Nächste Anforderung: Zeigt die Größe der Speicheranforderung in Puffern für die nächste Warteabfrage an.
- Warten auf: Zeigt die Menge des Arbeitsspeichers an, der verfügbar sein muss, um die Abfrage auszuführen, auf die der Wert "Nächste Anforderung" verweist. Der Wert "Warten auf" ist der Wert, der
Next Request
mit einem Kopfraumfaktor multipliziert wird. Dieser Wert garantiert effektiv, dass eine bestimmte Menge Arbeitsspeicher verfügbar ist, wenn die nächste Warteabfrage ausgeführt wird. - Kosten: Zeigt die Kosten der nächsten Warteabfrage an.
- Timeout: Zeigt das Timeout in Sekunden für die nächste Warteabfrage an.
- Wartezeit: Zeigt die verstrichene Zeit in Millisekunden an, da die nächste Warteabfrage in die Warteschlange gesetzt wurde.
- Current Max: Shows the overall memory limit for query execution. Dieser Wert ist der kombinierte Grenzwert für die große Abfragewarteschlange und die kleine Abfragewarteschlange.
Weitere Informationen dazu, was Speichererteilungen sind, was diese Werte bedeuten und wie Sie Speichererteilungen beheben können, finden Sie unter Problembehandlung bei langsamer Leistung oder geringem Arbeitsspeicher, die durch Speichererteilungen in SQL Server verursacht werden.
Optimierungsspeicher
Abfragen werden zur Kompilierung an den Server übermittelt. Der Kompilierungsprozess umfasst Analyse, Algebraierung und Optimierung. Abfragen werden basierend auf dem Speicher klassifiziert, den jede Abfrage während des Kompilierungsprozesses verwendet.
Notiz
Dieser Betrag enthält nicht den Speicher, der zum Ausführen der Abfrage erforderlich ist.
Wenn eine Abfrage gestartet wird, gibt es keine Beschränkung, wie viele Abfragen kompiliert werden können. Da der Arbeitsspeicherverbrauch zunimmt und einen Schwellenwert erreicht, muss die Abfrage ein Gateway übergeben, um den Vorgang fortzusetzen. Nach jedem Gateway gibt es ein schrittweises Verringern des Grenzwerts für gleichzeitig kompilierte Abfragen. Die Größe jedes Gateways hängt von der Plattform und der Last ab. Gatewaygrößen werden ausgewählt, um Skalierbarkeit und Durchsatz zu maximieren.
Wenn die Abfrage kein Gateway übergeben kann, wartet sie, bis der Arbeitsspeicher verfügbar ist, oder gibt einen Timeoutfehler zurück (Fehler 8628). Darüber hinaus erhält die Abfrage möglicherweise kein Gateway, wenn Sie die Abfrage abbrechen oder wenn ein Deadlock erkannt wird. Wenn die Abfrage mehrere Gateways übergibt, werden die kleineren Gateways erst freigegeben, wenn der Kompilierungsprozess abgeschlossen ist.
Mit diesem Verhalten können nur wenige arbeitsspeicherintensive Kompilierungen gleichzeitig auftreten. Darüber hinaus maximiert dieses Verhalten den Durchsatz für kleinere Abfragen.
Die nächste Tabelle enthält Details zu Speicherwartezwecken, die aufgrund unzureichender Speicher für die Abfrageoptimierung auftreten. Der interne Speicher wird für Optimiererspeicher verwendet, der von Systemabfragen verwendet wird, während der Standardspeicher zur Optimierung des Speichers 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 ist eine Beschreibung einiger dieser Werte:
- Konfigurierte Einheiten – Gibt die Anzahl der gleichzeitigen Abfragen an, die kompilierungsspeicher vom Gateway verwenden können. Im Beispiel können 32 gleichzeitige Abfragen speicher aus dem Kleinen Gateway (Standard), acht gleichzeitige Abfragen vom mittleren Gateway und eine Abfrage vom Big-Gateway verwenden. Wie bereits erwähnt, würde eine Abfrage, die mehr Arbeitsspeicher benötigt, als das kleine Gateway zuordnen kann, an das mittlere Gateway gehen, und diese Abfrage wird gezählt, um eine Einheit in beiden Gateways genommen zu haben. Je größer der Kompilierungsspeicher, den eine Abfrage benötigt, desto weniger konfigurierte Einheiten in einem Gateway.
- Verfügbare Einheiten – Gibt die Anzahl der Steckplätze 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 drei Abfragen derzeit Kompilierungsspeicher verwenden,
Available Units
wäre 32 minus 3 oder 29 Einheiten. - Acquires – Gibt die Anzahl der Einheiten oder Slots an, die von Abfragen zum Kompilieren erworben wurden. Wenn derzeit drei Abfragen Arbeitsspeicher von einem Gateway verwenden, wird = 3 abgerufen.
- Waiters – Gibt an, wie viele Abfragen auf den Kompilierungsspeicher in einem Gateway warten. Wenn alle Einheiten in einem Gateway erschöpft sind, ist der Waiters-Wert ungleich Null, der die Anzahl der Warteabfragen anzeigt.
- Schwellenwert – Gibt einen Grenzwert für den Gatewayspeicher an, der bestimmt, von wo aus eine Abfrage den Speicher erhält oder in welchem Gateway sie verbleibt. Wenn eine Abfrage nicht mehr als den Schwellenwert benötigt, verbleibt sie im kleinen Gateway (eine Abfrage beginnt immer mit dem kleinen Gateway). Wenn sie mehr Arbeitsspeicher für die Kompilierung benötigt, wird sie zum mittleren Speicher wechseln, und wenn dieser Schwellenwert immer noch unzureichend ist, geht es an das große Gateway. 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.
- Schwellenwert: Bestimmt den Schwellenwert für jedes Gateway. Da der Schwellenwert für das kleine Gateway vordefiniert ist, wird der Faktor auch auf denselben Wert festgelegt. Die Schwellenwertfaktoren für das mittlere und große Gateway sind Brüche des gesamten Optimiererspeichers (Gesamtspeicher in der Optimierungswarteschlange) und sind auf 12 bzw. 8 festgelegt. Wenn der gesamte Arbeitsspeicher angepasst wird, da andere SQL Server-Speicherkunden Arbeitsspeicher benötigen, würden die Schwellenwerte daher auch dynamisch angepasst.
- Timeout: Gibt den Wert in Minuten an, der definiert, wie lange eine Abfrage auf den Optimiererspeicher wartet. Wenn dieser Timeoutwert erreicht ist, wartet die Sitzung nicht mehr und löst fehler 8628 -
A time out occurred while waiting to optimize the query. Rerun the query.
Speicherbroker
Dieser Abschnitt enthält Informationen zu Speicherbrokern, die zwischengespeicherten Speicher, gestohlenen Speicher und reservierten Speicher steuern. Sie können die Informationen in diesen Tabellen nur für interne Diagnosen verwenden. Daher sind diese Informationen nicht detailliert dargestellt.
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