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.
- Voer de opdracht
DBCC MEMORYSTATUS
uit. - 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.
- 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.
- 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. - Bekijk elk onderdeel:
MEMORYCLEARK
,CACHESTORE
,USERSTORE
enOBJECTSTORE
. 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.- 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.
- 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 vanOBJECTSTORE_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.
- 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