Gebruik de opdracht DBCC MEMORYSTATUS om het geheugengebruik in SQL Server

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

Originele productversie: SQL Server
Origineel 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 op te lossen in SQL Server of om specifieke fouten met onvoldoende geheugen op te lossen. Veel fouten met onvoldoende geheugen 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 buffergroepen en procedurecachegegevens. Ook worden de uitvoer van globale geheugenobjecten, querygeheugenobjecten, optimalisatie en geheugenbrokers beschreven.

Opmerking

Prestatiemeter (PerfMon) en Taakbeheer houden geen rekening met het volledige 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 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. Toepassingen die deze opdracht gebruiken, kunnen daarom zonder waarschuwing worden verbroken.

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

DBCC MEMORYSTATUS gebruiken

DBCC MEMORYSTATUSwordt doorgaans gebruikt om problemen met weinig geheugen te onderzoeken die door SQL Server worden gerapporteerd. Weinig geheugen kan optreden als er sprake is van externe geheugendruk van buiten het SQL Server proces of interne druk die binnen het proces ontstaat. Interne druk kan worden veroorzaakt door de SQL Server database-engine of door andere onderdelen die in het proces worden uitgevoerd (zoals gekoppelde servers, XPs, SQLCLR, inbraakbeveiliging of antivirussoftware). Zie Problemen met onvoldoende geheugen of weinig geheugen oplossen in SQL Server 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. Specifieke scenario's vereisen mogelijk dat u de uitvoer een beetje anders benadert, maar de algemene aanpak wordt hier beschreven.

  1. Voer de opdracht DBCC MEMORYSTATUS uit.
  2. Gebruik de secties Proces-/systeemaantallen en Geheugenbeheer om vast te stellen of er sprake is van externe geheugenbelasting (de computer heeft bijvoorbeeld weinig fysiek of virtueel geheugen of de SQL Server werkset wordt uitgelicht). 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 het besturingssysteem te verminderen of voegt u meer RAM toe.
  4. Als u vaststelt dat de SQL Server-engine het meeste geheugen gebruikt (interne geheugendruk), kunt u de resterende secties van DBCC MEMORYSTATUS gebruiken om te bepalen welke onderdelen (Geheugenmedewerker, Cachestore, Gebruikersarchief of Objectstore) de grootste bijdrage leveren aan dit geheugengebruik.
  5. Controleer elk onderdeel: MEMORYCLEARK, CACHESTORE, USERSTOREen OBJECTSTORE. Bekijk de waarde Toegewezen pagina's om te bepalen hoeveel geheugen dat onderdeel verbruikt in SQL Server. Zie de tabel Geheugenklerktypen 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 het SQL Server geheugenbeheer. In die gevallen controleert u de waarde van de VM Vastgelegd onder het specifieke onderdeel in plaats van Toegewezen pagina's.
    2. Als uw computer NUMA gebruikt, worden sommige geheugenonderdelen per knooppunt opgesplitst. U kunt bijvoorbeeld , OBJECTSTORE_LOCK_MANAGER (node 1), OBJECTSTORE_LOCK_MANAGER (node 2)enzovoort observeren OBJECTSTORE_LOCK_MANAGER (node 0)en ten slotte een opgetelde waarde van elk knooppunt in OBJECTSTORE_LOCK_MANAGER (Total)observeren. De beste plaats 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 van DBCC MEMORYSTATUS bieden gedetailleerde en gespecialiseerde informatie over bepaalde geheugentoewijzingen. U kunt deze secties gebruiken om meer informatie te begrijpen en een verdere uitsplitsing van de toewijzingen in een geheugenmedewerker 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 geheugendruk is, kunt u het beste rechtstreeks naar die specifieke sectie gaan. Als u bijvoorbeeld op een andere manier hebt vastgesteld dat er een hoog geheugengebruik is dat geheugenfouten veroorzaakt, kunt u de sectie Geheugenobjecten query's 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

In deze sectie vindt u een voorbeelduitvoer in tabelvorm en worden de bijbehorende waarden beschreven.

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 hun beschrijvingen besproken:

  • Beschikbaar fysiek geheugen: deze waarde geeft de totale hoeveelheid vrij geheugen op de computer weer. In het voorbeeld is het vrije geheugen 5.060.247.552 bytes.
  • Beschikbaar virtueel geheugen: Deze waarde geeft aan dat de totale hoeveelheid vrij virtueel geheugen voor SQL Server proces 140.710.048.014.336 bytes (128 TB) is. Zie Limieten voor geheugen- en adresruimte voor meer informatie.
  • Beschikbaar wisselbestand: Deze waarde geeft de vrije wisselbestandsruimte weer. 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 (wordt niet uitgelicht) is 430.026.752 bytes.
  • Percentage toegewezen geheugen in WS: deze waarde geeft aan in welk percentage van SQL Server toegewezen virtueel geheugen zich bevindt in het RAM-geheugen (of werktet). De waarde van 100 procent geeft aan dat al het vastgelegde geheugen is opgeslagen in het RAM-geheugen en 0 procent ervan wordt uitgelicht.
  • Paginafouten: Deze waarde geeft de totale hoeveelheid harde en zachte paginafouten voor de SQL Server weer. In het voorbeeld is de waarde 151.138.

De resterende vier waarden zijn binair of booleaans.

  • De hoge waarde van het fysieke geheugen van het systeem 1 geeft aan dat SQL Server van mening is dat het beschikbare fysieke geheugen op de computer hoog is. Daarom is de waarde van Fysiek geheugen van het systeem laag 0, wat betekent dat er geen laag geheugen is. Vergelijkbare logica wordt toegepast op Weinig fysiek geheugen verwerken en Virtueel geheugen verwerken laag, 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.

Memory Manager

Deze sectie bevat een voorbeelduitvoer van Memory Manager die het totale geheugenverbruik per SQL Server weergeeft.

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 geeft de totale hoeveelheid virtuele adresruimte (VAS) of virtueel geheugen (VM) weer die SQL Server heeft gereserveerd. Reservering van virtueel geheugen maakt niet daadwerkelijk gebruik van fysiek geheugen; het betekent simpelweg 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 vastgelegd (in KB). Dit betekent dat het geheugen dat door het proces wordt gebruikt, wordt ondersteund door fysiek geheugen of minder vaak door het paginabestand. De eerder gereserveerde geheugenadressen worden nu ondersteund door een fysieke opslag; dat zijn ze toegewezen. Als Vergrendelde pagina's in geheugen is ingeschakeld, gebruikt SQL Server een alternatieve methode om geheugen, AWE-API toe te wijzen en wordt het geheugen meestal niet weergegeven in deze teller. Zie [Vergrendelde pagina's toegewezen](#Locked Toegewezen pagina's) voor deze toewijzingen. Zie VirtualAlloc(), MEM_COMMIT voor meer informatie.

  • Toegewezen pagina's: Deze waarde geeft het totale aantal geheugenpagina's weer dat is toegewezen door 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 worden omgewisseld naar schijf. Zie Address Windows Extensions (AWE)-geheugen voor meer informatie. De waarde nul geeft aan dat de functie 'vergrendelde pagina's in het geheugen' momenteel is uitgeschakeld en SQL Server in plaats daarvan virtueel geheugen gebruikt. In een dergelijk geval vertegenwoordigt de waarde VM Committed het geheugen dat is toegewezen aan SQL Server.

  • Toegewezen grote pagina's: deze waarde vertegenwoordigt de hoeveelheid geheugen die is toegewezen door SQL Server met behulp van Grote pagina's. Grote pagina's 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 vastgelegd, een ideale hoeveelheid geheugen die SQL Server zou kunnen gebruiken, op basis van recente workload.

  • Current Committed: Deze waarde geeft de hoeveelheid geheugen van het besturingssysteem (in kB) aan die het SQL Server geheugenbeheer momenteel heeft doorgevoerd (toegewezen in fysieke opslag). Deze waarde omvat 'vergrendelde pagina's in geheugen' (AWE-API) of virtueel geheugen. Daarom is 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, er nog steeds geheugen wordt toegewezen door het Virtual Memory Manager van het besturingssysteem en wordt dit 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 (lokale, externe en externe geheugenblokken van NUMA) voor meer informatie over deze eerste opslag van geheugen wanneer ER NUMA-knooppunten op de computer aanwezig zijn.

  • Laatste besturingssysteemfout: deze waarde toont de laatste fout in het besturingssysteem die is opgetreden toen er een geheugendruk op het systeem was. SQL Server registreert die besturingssysteemfout en toont deze in de uitvoer. Zie Systeemfoutcodes voor een volledige lijst met fouten in het besturingssysteem.

Geheugengebruik met NUMA-knooppunten

De sectie Geheugenbeheer 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 HARDWARE-NUMA-knooppunt. 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

Opmerking

  • 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 vm-waarden en de vm-vastgelegde waarden op alle geheugenknooppunten is iets kleiner dan de overeenkomstige waarden die worden gerapporteerd in de tabel Memory Manager.
  • NUMA-knooppunt 64 (knooppunt 64) is gereserveerd voor DAC en is zelden van belang bij geheugenonderzoek omdat deze verbinding beperkte geheugenbronnen gebruikt. Zie Diagnostische verbinding voor databasebeheerders voor meer informatie over een toegewezen beheerdersverbinding (DAC).

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

  • GERESERVEERDE VM: 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.

Geaggregeerd geheugen

De volgende tabel bevat geaggregeerde geheugeninformatie voor elk type medewerker en ELK NUMA-knooppunt. Voor een systeem met NUMA-functionaliteit ziet u mogelijk uitvoer die er ongeveer als volgt uitziet:

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 geeft het totale aantal geheugenpagina's weer waaraan wordt toegewezen door een specifiek onderdeel (geheugenmedewerker, gebruikersarchief, objectstore of cachearchief).

Opmerking

Deze knooppunt-id's komen overeen met de NUMA-knooppuntconfiguratie van de computer waarop SQL Server wordt uitgevoerd. De knooppunt-id's bevatten mogelijke SOFTWARE-NUMA-knooppunten die zijn gedefinieerd op hardware-NUMA-knooppunten of op een SMP-systeem. Zie Informatiegebeurtenis-id 17152 om de toewijzing tussen knooppunt-id's en CPU's voor elk knooppunt te vinden. 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 medewerker, zonder 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 medewerkers van dit type die gebruikmaken van de API voor bestanden met geheugentoewijzing. Deze API wordt ook wel gedeeld geheugen genoemd.
  • SM Committed: toont de VAS die is doorgevoerd door alle medewerkers van dit type die gebruikmaken van de API voor bestanden met geheugentoewijzing.

Als alternatieve methode kunt u samenvattingsinformatie verkrijgen voor elk type medewerker 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 met een uitsplitsing van verschillende statusgegevens en indexpagina's binnen 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 toegewezen geheugen in de vorige secties van dit artikel.
  • Dirty: toont de pagina's met database-inhoud en die zijn gewijzigd. Deze buffers bevatten wijzigingen die doorgaans door het controlepuntproces naar de schijf moeten worden gespoeld.
  • In I/O: 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 vanuit de opslag.
  • Vergrendeling: geeft de vergrendelingsbuffers weer. Een buffer wordt vastgelopen wanneer een thread de inhoud van een pagina leest of wijzigt. Een buffer wordt ook vastgezet wanneer de pagina van de schijf wordt gelezen of naar de schijf wordt geschreven. Een vergrendeling wordt gebruikt om de fysieke consistentie van de gegevens op de pagina te behouden terwijl deze worden gelezen of gewijzigd. Een vergrendeling wordt daarentegen gebruikt om logische en transactionele consistentie te behouden.
  • I/O-fout: toont het aantal buffers dat mogelijk I/O-gerelateerde besturingssysteemfouten heeft aangetroffen (dit duidt niet noodzakelijkerwijs op een probleem).
  • Levensverwachting van pagina: dit teller meet de hoeveelheid tijd in seconden dat de oudste pagina in de buffergroep is gebleven.

U kunt gedetailleerde informatie verkrijgen over de 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-gebaseerde server veel RAM-geheugen tot zijn beschikking heeft.

Plancache

In deze sectie wordt de plancache besproken die voorheen 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 geeft het totale aantal objecten in de cache weer die momenteel in de procedurecache staan. Deze waarde komt overeen met het aantal vermeldingen in de sys.dm_exec_cached_plans DMV.

    Opmerking

    Vanwege de dynamische aard van deze informatie is de overeenkomst mogelijk niet exact. U kunt PerfMon gebruiken om het SQL Server: Plan Cache-object en de sys.dm_exec_cached_plans DMV te bewaken 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 om alle objecten in de cache op te slaan in de plan- of procedurecache. U kunt dit getal vermenigvuldigen met 8 kB 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 opslag-engine voor verschillende serverbrede structuren.
  • Vergrendelingen: toont het geheugen dat wordt gebruikt door Vergrendelingsbeheer.
  • XDES: geeft het geheugen weer dat wordt gebruikt door Transaction Manager.
  • SETLS: toont het geheugen dat wordt gebruikt voor het toewijzen van de opslagenginespecifieke structuur per thread die gebruikmaakt van lokale opslag (TLS). Zie Thread Local Storage 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: geeft het geheugen weer dat Schema Manager gebruikt om opslag-engine-specifieke metagegevens op te slaan.
  • SQLCache: toont het geheugen dat wordt gebruikt om de tekst van ad-hoc- en voorbereide instructies op te slaan.
  • Replicatie: geeft het geheugen weer 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.

Query uitvoeren op geheugenobjecten

In deze sectie wordt informatie over het verlenen van querygeheugen beschreven. Het bevat ook een momentopname van het geheugengebruik van de query. 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 'kleine' drempelwaarden voor 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: toont het aantal actieve query's met geheugentoekenningen.
  • Wachtend: toont het aantal query's dat wacht op het verkrijgen van geheugentoelagen.
  • 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 wachtende query.
  • Wachten op: toont de hoeveelheid geheugen die beschikbaar moet zijn om de query uit te voeren waarnaar de waarde volgende aanvraag verwijst. De waarde Wachten op is de Next Request waarde vermenigvuldigd met een hoofdruimtefactor. Deze waarde garandeert effectief dat er een specifieke hoeveelheid geheugen beschikbaar is wanneer de volgende wachtquery wordt uitgevoerd.
  • Kosten: toont de kosten van de volgende wachtende query.
  • Time-out: toont de time-out in seconden voor de volgende wachtquery.
  • Wachttijd: toont de verstreken tijd, in milliseconden, sinds 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 weinig geheugen die worden veroorzaakt door geheugentoelagen in SQL Server oplossen voor meer informatie over wat geheugentoelagen zijn, wat deze waarden betekenen en hoe u problemen met geheugentoelagen kunt oplossen.

Optimalisatiegeheugen

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

Opmerking

Dit bedrag 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. Wanneer het geheugenverbruik toeneemt en een drempelwaarde bereikt, moet de query een gateway passeren om door te gaan. Er is een geleidelijk afnemende limiet van 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 er geheugen beschikbaar is of wordt een time-outfout geretourneerd (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 vrijgegeven als het compilatieproces is voltooid.

Dit gedrag zorgt ervoor dat er slechts enkele geheugenintensieve compilaties tegelijk plaatsvinden. Bovendien maximaliseert dit gedrag de doorvoer voor kleinere query's.

De volgende tabel bevat details van geheugenwachttijden die optreden vanwege onvoldoende geheugen voor queryoptimalisatie. Het interne geheugen is verantwoordelijk voor geoptimaliseerd geheugen dat wordt gebruikt door systeemquery's, terwijl het standaardgeheugen optimalisatiegeheugen rapporteert 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 enkele 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 geheugen gebruiken 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 Middelgrote gateway en wordt die query geteld als een eenheid in beide gateways. Hoe groter de hoeveelheid compilatiegeheugen die een query nodig heeft, hoe minder geconfigureerde eenheden in een gateway.
  • Beschikbare eenheden : geeft het aantal sites of eenheden aan dat beschikbaar is voor gelijktijdige query's die moeten worden gecompileerd uit de lijst met geconfigureerde eenheden. Als er bijvoorbeeld 32 eenheden beschikbaar zijn, maar drie query's momenteel compilatiegeheugen gebruiken, is dat Available Units 32 min 3 of 29 eenheden.
  • Acquires : geeft het aantal eenheden of sites aan dat is verkregen door query's die moeten worden gecompileerd. Als drie query's momenteel geheugen van een gateway gebruiken, wordt opgehaald = 3.
  • Obers : geeft aan hoeveel query's er wachten op compilatiegeheugen in een gateway. Als alle eenheden in een gateway zijn uitgeput, is de waarde voor obers niet-nul, waarmee het aantal wachtende query's wordt weergegeven.
  • Drempelwaarde : geeft een gatewaygeheugenlimiet aan die bepaalt waar een query het geheugen vandaan haalt of in welke gateway deze blijft. Als een query niet meer dan de drempelwaarde nodig heeft, 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 de 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 het x64-platform.
  • Drempelwaardefactor: bepaalt de drempelwaarde voor elke gateway. Omdat de drempelwaarde voor de kleine gateway vooraf is gedefinieerd, wordt de factor ook ingesteld op dezelfde waarde. De drempelwaardefactoren voor de middelgrote en grote gateway zijn breuken van het totale optimalisatiegeheugen (algemeen geheugen in de optimalisatiewachtrij) en zijn ingesteld op respectievelijk 12 en 8. Dus als het totale geheugen wordt aangepast omdat andere SQL Server geheugengebruikers geheugen vereisen, zouden de drempelwaarden er ook voor zorgen dat de drempelwaarden 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 wordt bereikt, stopt de sessie met wachten en geeft 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, gestolen geheugen en gereserveerd geheugen beheren. 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