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 MEMORYSTATUS
wordt 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.
- Voer de opdracht
DBCC MEMORYSTATUS
uit. - 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.
- 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.
- 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. - Controleer elk onderdeel:
MEMORYCLEARK
,CACHESTORE
,USERSTORE
enOBJECTSTORE
. 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.- 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.
- 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 observerenOBJECTSTORE_LOCK_MANAGER (node 0)
en ten slotte een opgetelde waarde van elk knooppunt inOBJECTSTORE_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.
- 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