Delen via


Gebruik de opdracht DBCC MEMORYSTATUS om het geheugengebruik in SQL Server te bewaken

In dit artikel wordt beschreven hoe u de DBCC MEMORYSTATUS opdracht gebruikt om het geheugengebruik te bewaken.

Oorspronkelijke productversie: SQL Server
Oorspronkelijk KB-nummer: 907877

Inleiding

De DBCC MEMORYSTATUS opdracht biedt een momentopname van de huidige geheugenstatus Microsoft SQL Server en het besturingssysteem. Het biedt een van de meest gedetailleerde uitvoer van geheugendistributie en -gebruik in SQL Server. U kunt de uitvoer gebruiken om problemen met geheugenverbruik in SQL Server op te lossen of om specifieke out-of-memory-fouten op te lossen. Veel out-of-memory fouten genereren deze uitvoer automatisch in het foutenlogboek. Als er een fout optreedt die is gerelateerd aan een voorwaarde met weinig geheugen, kunt u de DBCC MEMORYSTATUS opdracht uitvoeren en de uitvoer opgeven wanneer u contact opneemt met Microsoft Ondersteuning.

De uitvoer van de DBCC MEMORYSTATUS opdracht bevat secties voor geheugenbeheer, geheugengebruik, geaggregeerde geheugengegevens, informatie over buffergroep en informatie over de procedurecache. Tevens wordt een beschrijving gegeven van globale geheugenobjecten, querygeheugenobjecten, optimalisatie en geheugenbrokers.

Notitie

Prestatiemeter (PerfMon) en Taakbeheer maken geen rekening met volledig geheugengebruik als de optie Vergrendelde pagina's in geheugen is ingeschakeld. Er zijn geen prestatiemeteritems die het geheugengebruik van de AWE-API (Address Windowing Extensions) weergeven.

Belangrijk

De DBCC MEMORYSTATUS opdracht is bedoeld als een diagnostisch hulpprogramma voor Microsoft Ondersteuning. De indeling van de uitvoer en het detailniveau dat wordt opgegeven, kunnen worden gewijzigd tussen servicepacks en productreleases. De functionaliteit die de DBCC MEMORYSTATUS opdracht biedt, kan worden vervangen door een ander mechanisme in latere productversies. Daarom werkt deze opdracht in latere productversies mogelijk niet meer. Er worden geen aanvullende waarschuwingen gegeven voordat deze opdracht wordt gewijzigd of verwijderd. Daarom kunnen toepassingen die deze opdracht gebruiken, zonder waarschuwing worden verbroken.

De uitvoer van de DBCC MEMORYSTATUS opdracht is gewijzigd ten opzichte van eerdere versies van SQL Server. Het bevat momenteel verschillende tabellen die niet beschikbaar waren in de eerdere productversies.

DBCC MEMORYSTATUS gebruiken

DBCC MEMORYSTATUS wordt meestal gebruikt om problemen met weinig geheugen te onderzoeken die worden gerapporteerd door SQL Server. Er kan weinig geheugen optreden als er sprake is van externe geheugenbelasting van buiten het SQL Server-proces of interne druk die afkomstig is van het proces. Interne druk kan worden veroorzaakt door de SQL Server-database-engine of door andere onderdelen die binnen het proces worden uitgevoerd (zoals gekoppelde servers, XPs, SQLCLR, inbraakbeveiliging of antivirussoftware). Zie Problemen met onvoldoende geheugen of onvoldoende geheugen in SQL Server oplossen voor meer informatie over het oplossen van geheugenbelasting.

Hier volgen de algemene stappen voor het gebruik van de opdracht en het interpreteren van de resultaten. Voor specifieke scenario's is het mogelijk dat u de uitvoer iets anders benadert, maar de algemene benadering wordt hier beschreven.

  1. Voer de opdracht DBCC MEMORYSTATUS uit.
  2. Gebruik de secties Proces/Systeemaantallen en Geheugenbeheer om te bepalen of er sprake is van externe geheugenbelasting (de computer heeft bijvoorbeeld weinig fysiek of virtueel geheugen, of de SQL Server-werkset wordt uitgepaginad). Gebruik deze secties ook om te bepalen hoeveel geheugen de SQL Server-database-engine heeft toegewezen in vergelijking met het totale geheugen op het systeem.
  3. Als u vaststelt dat er sprake is van externe geheugenbelasting, probeert u het geheugengebruik door andere toepassingen en door het besturingssysteem te verminderen of voegt u meer RAM-geheugen toe.
  4. Als u vaststelt dat de SQL Server-engine het grootste deel van het geheugen gebruikt (interne geheugenbelasting), kunt u de resterende secties DBCC MEMORYSTATUS gebruiken om te bepalen welke onderdelen (Geheugenbediende, Cachestore, UserStore of Objectstore) de grootste bijdrage leveren aan dit geheugengebruik.
  5. Bekijk elk onderdeel: MEMORYCLEARK, CACHESTORE, USERSTOREen OBJECTSTORE. Bekijk de waarde Toegewezen pagina's om te bepalen hoeveel geheugen dat onderdeel in SQL Server gebruikt. Zie de tabel Memory Clerk types voor een korte beschrijving van de meeste geheugenonderdelen van de database-engine.
    1. In zeldzame gevallen is de toewijzing een directe virtuele toewijzing in plaats van de SQL Server-geheugenbeheerder te doorlopen. In die gevallen bekijkt u de waarde die is vastgelegd voor de VIRTUELE machine onder het specifieke onderdeel in plaats van Pagina's toegewezen.
    2. Als uw computer NUMA gebruikt, worden sommige geheugenonderdelen per knooppunt uitgesplitsd. U kunt bijvoorbeeld een OBJECTSTORE_LOCK_MANAGER (node 2)OBJECTSTORE_LOCK_MANAGER (node 1)opgetelde waarde van OBJECTSTORE_LOCK_MANAGER (node 0)elk knooppunt bekijkenOBJECTSTORE_LOCK_MANAGER (Total), enzovoort. De beste plek om te beginnen is in de sectie die de totale waarde rapporteert en vervolgens de uitsplitsing indien nodig onderzoekt. Zie Geheugengebruik met NUMA-knooppunten voor meer informatie.
  6. Sommige secties bevatten DBCC MEMORYSTATUS gedetailleerde en gespecialiseerde informatie over bepaalde geheugentoewijzingen. U kunt deze secties gebruiken om meer informatie te begrijpen en een verdere uitsplitsing van de toewijzingen binnen een geheugenbediende te bekijken. Voorbeelden van dergelijke secties zijn buffergroep (gegevens- en indexcache), procedurecache/plancache, querygeheugenobjecten (geheugentoekenningen), optimalisatiewachtrij en kleine en middelgrote en grote gateways (geoptimaliseerd geheugen). Als u al weet dat een bepaald onderdeel van het geheugen in SQL Server de bron van geheugenbelasting is, kunt u het beste rechtstreeks naar die specifieke sectie gaan. Als u bijvoorbeeld op een andere manier hebt vastgesteld dat er sprake is van een hoog geheugengebruik dat geheugenfouten veroorzaakt, kunt u de sectie Querygeheugenobjecten bekijken.

In de rest van dit artikel worden enkele nuttige tellers in de DBCC MEMORYSTATUS uitvoer beschreven waarmee u geheugenproblemen effectiever kunt diagnosticeren.

Proces-/systeemaantallen

Deze sectie bevat een voorbeelduitvoer in tabelvorm en beschrijft de waarden.

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 de volgende lijst worden waarden en de bijbehorende beschrijvingen besproken:

  • Beschikbaar fysiek geheugen: deze waarde toont de totale hoeveelheid vrij geheugen op de computer. In het voorbeeld is het vrije geheugen 5.060.247.552 bytes.
  • Beschikbaar virtueel geheugen: Deze waarde toont de totale hoeveelheid gratis virtueel geheugen voor het SQL Server-proces is 140.710.048.014.336 bytes (128 TB). Zie Geheugen- en adresruimtelimieten voor meer informatie.
  • Beschikbaar wisselbestand: deze waarde toont de vrije ruimte voor het wisselbestand. In het voorbeeld is de waarde 7.066.804.224 bytes.
  • Werkset: Deze waarde geeft de totale hoeveelheid virtueel geheugen weer die het SQL Server-proces in ram-geheugen heeft (is niet gepaginad) is 430.026.752 bytes.
  • Percentage toegewezen geheugen in WS: deze waarde laat zien welk percentage van het toegewezen virtuele geheugen van SQL Server zich in het RAM-geheugen bevindt (of werkt met een werkset). De waarde van 100 procent geeft aan dat al het vastgelegde geheugen wordt opgeslagen in het RAM-geheugen en 0 procent ervan wordt uitgepaginad.
  • Paginafouten: deze waarde toont de totale hoeveelheid vaste en zachte paginafouten voor de SQL Server. In het voorbeeld is de waarde 151.138.

De overige vier waarden zijn binair of booleaans.

  • De hoge waarde van het fysieke systeemgeheugen van 1 geeft aan dat SQL Server het beschikbare fysieke geheugen op de computer hoog beschouwt. Daarom is de waarde van het fysieke geheugen van het systeem 0, wat betekent dat er geen weinig geheugen beschikbaar is. Vergelijkbare logica wordt toegepast op fysiek geheugen verwerken en virtueel geheugen laag verwerken, waarbij 0 betekent dat het onwaar is en 1 betekent dat het waar is. In dit voorbeeld zijn beide waarden 0, wat betekent dat er voldoende fysiek en virtueel geheugen is voor het SQL Server-proces.

Geheugenbeheer

Deze sectie bevat een voorbeelduitvoer van Memory Manager waarin het totale geheugenverbruik door SQL Server wordt weergegeven.

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 de volgende lijst worden waarden in de uitvoer en de bijbehorende beschrijvingen besproken:

  • GERESERVEERDE VM: deze waarde toont de totale hoeveelheid virtuele adresruimte (VAS) of virtueel geheugen (VM) die SQL Server heeft gereserveerd. Reservering voor virtueel geheugen maakt geen gebruik van fysiek geheugen; het betekent gewoon dat virtuele adressen buiten de grote VAS worden geplaatst. Zie VirtualAlloc(), MEM_RESERVE voor meer informatie.

  • VM vastgelegd: deze waarde toont de totale hoeveelheid virtueel geheugen (VM) die SQL Server heeft doorgevoerd (in KB). Dit betekent dat het geheugen dat door het proces wordt gebruikt, wordt ondersteund door fysiek geheugen of minder vaak per paginabestand. De eerder gereserveerde geheugenadressen worden nu ondersteund door een fysieke opslag; dat is dat ze worden toegewezen. Als Vergrendelde pagina's in het geheugen is ingeschakeld, gebruikt SQL Server een alternatieve methode voor het toewijzen van geheugen, AWE-API en het meeste geheugen wordt niet weergegeven in deze teller. Zie [Vergrendelde pagina's toegewezen](#Locked Pagina's toegewezen) voor deze toewijzingen. Zie VirtualAlloc(), MEM_COMMIT voor meer informatie.

  • Toegewezen pagina's: deze waarde toont het totale aantal geheugenpagina's dat is toegewezen door de SQL Server-database-engine.

  • Toegewezen vergrendelde pagina's: deze waarde vertegenwoordigt de hoeveelheid geheugen, in kilobytes (KB), die SQL Server heeft toegewezen en vergrendeld in fysiek RAM-geheugen met behulp van de AWE-API. Het geeft aan hoeveel geheugen SQL Server actief gebruikt en heeft gevraagd om in het geheugen te worden bewaard om de prestaties te optimaliseren. Door pagina's in het geheugen te vergrendelen, zorgt SQL Server ervoor dat kritieke databasepagina's direct beschikbaar zijn en niet naar schijf zijn gewisseld. Zie Geheugen voor Adres Windows-extensies (AWE) voor meer informatie. Een waarde van nul geeft aan dat de functie vergrendelde pagina's in het geheugen momenteel is uitgeschakeld en SQL Server in plaats daarvan gebruikmaakt van virtueel geheugen. In dat geval vertegenwoordigt de waarde van de TOEGEWEZEN VM het geheugen dat aan SQL Server is toegewezen.

  • Toegewezen grote pagina's: deze waarde vertegenwoordigt de hoeveelheid geheugen die door SQL Server is toegewezen met behulp van Grote pagina's. Large Pages is een functie voor geheugenbeheer die wordt geleverd door het besturingssysteem. In plaats van het standaardpaginaformaat (meestal 4 kB) te gebruiken, gebruikt deze functie een groter paginaformaat, zoals 2 MB of 4 MB. Een waarde van nul geeft aan dat de functie niet is ingeschakeld. Zie Virtual Alloc(), MEM_LARGE_PAGES voor meer informatie.

  • Doel vastgelegd: deze waarde geeft de doelhoeveelheid geheugen aan die SQL Server wil hebben doorgevoerd, een ideale hoeveelheid geheugen die SQL Server zou kunnen verbruiken, op basis van recente werkbelasting.

  • Huidige vastgelegde waarde: deze waarde geeft de hoeveelheid geheugen van het besturingssysteem (in KB) aan die de SQL Server-geheugenbeheerder momenteel heeft doorgevoerd (toegewezen in fysieke opslag). Deze waarde omvat 'vergrendelde pagina's in geheugen' (AWE API) of virtueel geheugen. Daarom ligt deze waarde dicht bij of hetzelfde als toegewezen VM-toegewezen of vergrendelde pagina's. Houd er rekening mee dat wanneer SQL Server gebruikmaakt van de AWE-API, nog steeds geheugen wordt toegewezen door virtual memory manager van het besturingssysteem en wordt weergegeven als VM vastgelegd.

  • NUMA-groeifase: deze waarde geeft aan of SQL Server zich momenteel in een NUMA-groeifase bevindt. Zie How It Works: SQL Server (NUMA Local, Foreign and Away Memory Blocks) voor meer informatie over deze eerste opstart van het geheugen wanneer ER NUMA-knooppunten aanwezig zijn op de computer.

  • Laatste besturingssysteemfout: deze waarde toont de laatste besturingssysteemfout die is opgetreden tijdens een geheugendruk op het systeem. SQL Server registreert die besturingssysteemfout en geeft deze weer in de uitvoer. Zie Systeemfoutcodes voor een volledige lijst met besturingssysteemfouten.

Geheugengebruik met NUMA-knooppunten

De sectie Memory Manager wordt gevolgd door een samenvatting van het geheugengebruik voor elk geheugenknooppunt. In een systeem met niet-uniforme geheugentoegang (NUMA) is er een bijbehorende geheugenknooppuntvermelding voor elk NUMA-hardwareknooppunt. In een SMP-systeem is er één geheugenknooppuntvermelding. Hetzelfde patroon wordt toegepast op andere geheugensecties.

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

Notitie

  • De Memory node Id waarde komt mogelijk niet overeen met de id van het hardwareknooppunt.
  • Deze waarden geven het geheugen weer dat wordt toegewezen door threads die worden uitgevoerd op dit NUMA-knooppunt. Deze waarden zijn niet het geheugen dat lokaal is voor het NUMA-knooppunt.
  • De som van de gereserveerde waarden van de VM en de waarden die zijn vastgelegd voor de VM op alle geheugenknooppunten, zijn iets kleiner dan de overeenkomende waarden die worden gerapporteerd in de tabel Memory Manager.
  • NUMA-knooppunt 64 (knooppunt 64) is gereserveerd voor DAC en is zelden van belang voor geheugenonderzoek omdat deze verbinding gebruikmaakt van beperkte geheugenbronnen. Zie Diagnostische verbinding voor databasebeheerders voor meer informatie over toegewezen beheerdersverbinding (DAC).

In de volgende lijst worden waarden in de uitvoertabel en de bijbehorende beschrijvingen besproken:

  • VM gereserveerd: toont de virtuele adresruimte (VAS) die is gereserveerd door threads die op dit knooppunt worden uitgevoerd.
  • VM vastgelegd: toont de VAS die wordt doorgevoerd door threads die op dit knooppunt worden uitgevoerd.

Geheugen aggregeren

De volgende tabel bevat geaggregeerde geheugengegevens voor elk type clerk en NUMA-knooppunt. Voor een NUMA-systeem ziet u mogelijk uitvoer die lijkt op het volgende:

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

De waarde van Pages Allocated dit diagram toont het totale aantal geheugenpagina's waaraan een specifiek onderdeel is toegewezen (geheugenbediende, gebruikersarchief, objectstore of cachearchief).

Notitie

Deze knooppunt-id's komen overeen met de NUMA-knooppuntconfiguratie van de computer waarop SQL Server wordt uitgevoerd. De knooppunt-id's bevatten mogelijke NUMA-softwareknooppunten die zijn gedefinieerd boven op hardware NUMA-knooppunten of op een SMP-systeem. Zie Informatiegebeurtenis-id 17152 voor informatie over toewijzing tussen knooppunt-id's en CPU's voor elk knooppunt. Deze gebeurtenis wordt vastgelegd in het toepassingslogboek in Logboeken wanneer u SQL Server start.

Voor een SMP-systeem ziet u slechts één tabel voor elk type bediende, niet tellend knooppunt = 64 gebruikt door DAC. Deze tabel lijkt op het volgende voorbeeld.

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

Andere informatie in deze tabellen gaat over gedeeld geheugen:

  • SM Reserved: Toont de VAS die is gereserveerd door alle bedienden van dit type die gebruikmaken van de API voor geheugentoewijzingen. Deze API wordt ook wel gedeeld geheugen genoemd.
  • SM Commit: toont de VAS die door alle medewerkers van dit type wordt doorgevoerd die gebruikmaken van de API voor geheugentoewijzingen.

Als alternatieve methode kunt u samenvattingsinformatie verkrijgen voor elk type clerk voor alle geheugenknooppunten met behulp van de sys.dm_os_memory_clerks dynamische beheerweergave (DMV). Voer hiervoor de volgende query uit:

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 van buffergroep

Dit is een belangrijke sectie die een uitsplitsing biedt van verschillende statusgegevens en indexpagina's in de buffergroep, ook wel gegevenscache genoemd. De volgende uitvoertabel bevat details over de buffergroep en andere informatie.

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 de volgende lijst worden waarden in de uitvoer en de bijbehorende beschrijvingen besproken:

  • Database: Toont het aantal buffers (pagina's) met database-inhoud (gegevens- en indexpagina's).
  • Doel: Toont de doelgrootte van de buffergroep (aantal buffers). Zie Doel vastgelegd geheugen in de vorige secties van dit artikel.
  • Vuil: Toont de pagina's met database-inhoud en zijn gewijzigd. Deze buffers bevatten wijzigingen die doorgaans door het controlepuntproces naar de schijf moeten worden leeggemaakt.
  • In IO: toont de buffers die wachten op een I/O-bewerking die in behandeling is. Dit betekent dat de inhoud van deze pagina's wordt geschreven naar of gelezen uit de opslag.
  • Vergrendeling: Toont de vergrendelingsbuffers. Een buffer wordt geblokkeerd wanneer een thread de inhoud van een pagina leest of wijzigt. Een buffer wordt ook vastgezet wanneer de pagina wordt gelezen van schijf of naar schijf wordt geschreven. Er wordt een vergrendeling gebruikt om de fysieke consistentie van de gegevens op de pagina te behouden terwijl deze worden gelezen of gewijzigd. Daarentegen wordt een vergrendeling gebruikt om logische en transactionele consistentie te behouden.
  • IO-fout: toont het aantal buffers dat mogelijk I/O-gerelateerde besturingssysteemfouten heeft aangetroffen (dit duidt niet noodzakelijkerwijs op een probleem).
  • Levensverwachting van pagina: Deze teller meet de hoeveelheid tijd in seconden dat de oudste pagina in de buffergroep is gebleven.

U kunt gedetailleerde informatie verkrijgen over buffergroep voor databasepagina's met behulp van de sys.dm_os_buffer_descriptors DMV. Maar gebruik deze DMV met voorzichtigheid omdat deze lang kan worden uitgevoerd en een enorme uitvoer kan produceren als uw SQL Server-server veel RAM-geheugen mag hebben.

Plancache

In deze sectie wordt de plancache besproken die eerder een procedurecache werd genoemd.

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

In de volgende lijst worden waarden in de uitvoer en de bijbehorende beschrijvingen besproken:

  • TotalProcs: deze waarde toont het totale aantal objecten in de cache dat zich momenteel in de procedurecache bevindt. Deze waarde komt overeen met het aantal vermeldingen in de sys.dm_exec_cached_plans DMV.

    Notitie

    Vanwege de dynamische aard van deze informatie is de overeenkomst mogelijk niet exact. U kunt PerfMon gebruiken om het SQL Server-object te bewaken: Cache-object plannen en de sys.dm_exec_cached_plans DMV voor gedetailleerde informatie over het type objecten in de cache, zoals triggers, procedures en ad-hocobjecten.

  • TotalPages: toont de cumulatieve pagina's die worden gebruikt voor het opslaan van alle objecten in de cache in de cache van het plan of de procedure. U kunt dit getal met 8 kB vermenigvuldigen om de waarde in KB's op te halen.

  • InUsePages: Toont de pagina's in de procedurecache die deel uitmaken van procedures die momenteel actief zijn. Deze pagina's kunnen niet worden verwijderd.

Globale geheugenobjecten

Deze sectie bevat informatie over verschillende globale geheugenobjecten en de hoeveelheid geheugen die ze gebruiken.

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 de volgende lijst worden waarden in de uitvoer en de bijbehorende beschrijvingen besproken:

  • Resource: Geeft het geheugen weer dat door het resourceobject wordt gebruikt. Het wordt gebruikt door de opslagengine voor verschillende serverbrede structuren.
  • Vergrendelingen: Toont het geheugen dat wordt gebruikt door Lock Manager.
  • XDES: Geeft het geheugen weer dat wordt gebruikt door Transaction Manager.
  • SETLS: Toont het geheugen dat wordt gebruikt om de opslagenginespecifieke structuur per thread toe te wijzen die gebruikmaakt van lokale threadopslag (TLS). Zie De lokale opslag van threads voor meer informatie.
  • SubpDesc Allocators: toont het geheugen dat wordt gebruikt voor het beheren van subprocessen voor parallelle query's, back-upbewerkingen, herstelbewerkingen, databasebewerkingen, bestandsbewerkingen, spiegeling en asynchrone cursors. Deze subprocessen worden ook wel 'parallelle processen' genoemd.
  • SE SchemaManager: toont het geheugen dat Schema Manager gebruikt voor het opslaan van metagegevens die specifiek zijn voor opslagengines.
  • SQLCache: toont het geheugen dat wordt gebruikt om de tekst van ad-hoc- en voorbereide instructies op te slaan.
  • Replicatie: Toont het geheugen dat de server gebruikt voor interne replicatiesubsystemen.
  • ServerGlobal: Toont het globale servergeheugenobject dat algemeen wordt gebruikt door verschillende subsystemen.
  • XP Global: toont het geheugen dat wordt gebruikt door de uitgebreide opgeslagen procedures.
  • SortTables: Toont het geheugen dat wordt gebruikt door de sorteertabellen.

Querygeheugenobjecten

In deze sectie wordt informatie over het verlenen van querygeheugens beschreven. Het bevat ook een momentopname van het querygeheugengebruik. Querygeheugen wordt ook wel 'werkruimtegeheugen' genoemd.

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

Als de grootte en de kosten van een query voldoen aan de drempelwaarden voor 'klein' querygeheugen, wordt de query in een kleine querywachtrij geplaatst. Dit gedrag voorkomt dat kleinere query's worden vertraagd achter grotere query's die al in de wachtrij staan.

In de volgende lijst worden waarden in de uitvoer en de bijbehorende beschrijvingen besproken:

  • Subsidies: Geeft het aantal actieve query's weer met geheugentoekenningen.
  • Wachten: Geeft het aantal query's weer dat wacht om geheugentoekenningen te verkrijgen.
  • Beschikbaar: Toont de buffers die beschikbaar zijn voor query's voor gebruik als hash-werkruimte en sorteerwerkruimte. De Available waarde wordt periodiek bijgewerkt.
  • Volgende aanvraag: toont de grootte van de geheugenaanvraag, in buffers, voor de volgende wachtquery.
  • Wachten op: geeft de hoeveelheid geheugen weer die beschikbaar moet zijn om de query uit te voeren waarnaar de waarde van de volgende aanvraag verwijst. De waarde Wachten op is de Next Request waarde vermenigvuldigd met een hoofdruimtefactor. Deze waarde garandeert effectief dat een specifieke hoeveelheid geheugen beschikbaar is wanneer de volgende wachtquery wordt uitgevoerd.
  • Kosten: toont de kosten van de volgende wachtquery.
  • Time-out: Geeft de time-out in seconden weer voor de volgende wachtquery.
  • Wachttijd: toont de verstreken tijd, in milliseconden, omdat de volgende wachtquery in de wachtrij is geplaatst.
  • Huidig maximum: toont de totale geheugenlimiet voor het uitvoeren van query's. Deze waarde is de gecombineerde limiet voor zowel de grote querywachtrij als de kleine querywachtrij.

Zie Problemen met trage prestaties of geheugenproblemen oplossen die worden veroorzaakt door geheugentoelagen in SQL Server voor meer informatie over wat geheugentoelagen zijn, wat deze waarden betekenen en hoe u problemen met geheugen kunt oplossen.

Optimalisatiegeheugen

Query's worden ter compilatie naar de server verzonden. Het compilatieproces omvat parseren, algebraisatie en optimalisatie. Query's worden geclassificeerd op basis van het geheugen dat elke query verbruikt tijdens het compilatieproces.

Notitie

Deze hoeveelheid bevat niet het geheugen dat nodig is om de query uit te voeren.

Wanneer een query wordt gestart, is er geen limiet voor het aantal query's dat kan worden gecompileerd. Naarmate het geheugenverbruik toeneemt en een drempelwaarde bereikt, moet de query een gateway doorgeven om door te gaan. Er is een geleidelijk afnemende limiet voor gelijktijdig gecompileerde query's na elke gateway. De grootte van elke gateway is afhankelijk van het platform en de belasting. Gatewaygrootten worden gekozen om de schaalbaarheid en doorvoer te maximaliseren.

Als de query geen gateway kan doorgeven, wacht deze totdat het geheugen beschikbaar is of een time-outfout retourneert (fout 8628). Bovendien krijgt de query mogelijk geen gateway als u de query annuleert of als er een impasse wordt gedetecteerd. Als de query meerdere gateways doorgeeft, worden de kleinere gateways pas uitgebracht nadat het compilatieproces is voltooid.

Met dit gedrag kunnen slechts enkele geheugenintensieve compilaties tegelijkertijd worden uitgevoerd. Daarnaast maximaliseert dit gedrag de doorvoer voor kleinere query's.

De volgende tabel bevat details van wachttijden die optreden vanwege onvoldoende geheugen voor queryoptimalisatie. De interne geheugenaccounts voor geoptimaliseerd geheugen dat wordt gebruikt door systeemquery's, terwijl het standaardrapportenoptimalisatiegeheugen voor gebruikers- of toepassingsquery's.

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 volgt een beschrijving van een aantal van deze waarden:

  • Geconfigureerde eenheden : geeft het aantal gelijktijdige query's aan dat compilatiegeheugen van de gateway kan gebruiken. In het voorbeeld kunnen 32 gelijktijdige query's gebruikmaken van geheugen van de kleine gateway (standaard), acht gelijktijdige query's van de middelgrote gateway en één query van de grote gateway. Zoals eerder vermeld, als een query meer geheugen nodig heeft dan de kleine gateway kan toewijzen, gaat deze naar de middelgrote gateway en wordt die query geteld om een eenheid in beide gateways te hebben genomen. Hoe groter de hoeveelheid compilatiegeheugen die een query nodig heeft, hoe minder geconfigureerde eenheden in een gateway.
  • Beschikbare eenheden : geeft het aantal sleuven of eenheden aan dat beschikbaar is voor gelijktijdige query's die moeten worden gecompileerd vanuit de lijst met geconfigureerde eenheden. Als er bijvoorbeeld 32 eenheden beschikbaar zijn, maar er momenteel drie query's gebruikmaken van compilatiegeheugen, is dit Available Units 32 min 3 of 29 eenheden.
  • Hiermee wordt het aantal eenheden of sleuven aangegeven dat door query's is verkregen om te compileren . Als er momenteel drie query's geheugen van een gateway gebruiken, verkrijgt u = 3.
  • Obers : geeft aan hoeveel query's wachten op compilatiegeheugen in een gateway. Als alle eenheden in een gateway uitgeput zijn, is de waarde van de obers niet nul, waarin het aantal wachtquery's wordt weergegeven.
  • Drempelwaarde : geeft een geheugenlimiet voor de gateway aan die bepaalt waar een query het geheugen vandaan haalt of in welke gateway deze blijft. Als een query niet meer nodig heeft dan de drempelwaarde, blijft deze in de kleine gateway (een query begint altijd met de kleine gateway). Als er meer geheugen nodig is voor compilatie, gaat het naar het gemiddelde en als die drempelwaarde nog steeds onvoldoende is, gaat deze naar de grote gateway. Voor de kleine gateway is de drempelwaardefactor 380.000 bytes (kan in toekomstige versies worden gewijzigd) voor x64-platform.
  • Drempelwaarde: bepaalt de drempelwaarde voor elke gateway. Omdat de drempelwaarde vooraf is gedefinieerd voor de kleine gateway, wordt de factor ook ingesteld op dezelfde waarde. De drempelwaarden voor de gemiddelde en grote gateway zijn breuken van het totale geoptimaliseerde geheugen (Algemeen geheugen in de optimalisatiewachtrij) en zijn respectievelijk ingesteld op 12 en 8. Dus als het totale geheugen wordt aangepast omdat andere SQL Server-geheugengebruikers geheugen vereisen, zouden de drempelwaarden ook dynamisch worden aangepast.
  • Time-out: Geeft de waarde in minuten aan die bepaalt hoe lang een query wacht op geoptimaliseerd geheugen. Als deze time-outwaarde is bereikt, stopt de sessie met wachten en genereert fout 8628 - A time out occurred while waiting to optimize the query. Rerun the query.

Geheugenbrokers

Deze sectie bevat informatie over geheugenbrokers die geheugen in de cache beheren, gestolen geheugen en gereserveerd geheugen. U kunt de informatie in deze tabellen alleen gebruiken voor interne diagnostische gegevens. Daarom is deze informatie niet gedetailleerd.

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