Använd kommandot DBCC MEMORYSTATUS för att övervaka minnesanvändningen i SQL Server
I den DBCC MEMORYSTATUS
här artikeln beskrivs hur du använder kommandot för att övervaka minnesanvändningen.
Ursprunglig produktversion: SQL Server
Ursprungligt KB-nummer: 907877
Inledning
Kommandot DBCC MEMORYSTATUS
ger en ögonblicksbild av den aktuella minnesstatusen microsoft SQL Server och operativsystemet. Den innehåller en av de mest detaljerade utdata från minnesdistribution och användning i SQL Server. Du kan använda utdata för att felsöka problem med minnesförbrukning i SQL Server eller för att felsöka specifika minnesfel. Många minnesfel genererar automatiskt dessa utdata i felloggen. Om du får ett fel som är relaterat till ett lågminnesvillkor kan du köra DBCC MEMORYSTATUS
kommandot och ange utdata när du kontaktar Microsoft Support.
Utdata från DBCC MEMORYSTATUS
kommandot innehåller avsnitt för minneshantering, minnesanvändning, aggregerad minnesinformation, information om buffertpool och information om procedurens cache. Den beskriver också utdata från globala minnesobjekt, frågeminnesobjekt, optimering och koordinatorer för minne.
Obs!
Prestandaövervakaren (PerfMon) och Aktivitetshanteraren tar inte hänsyn till fullständig minnesanvändning om alternativet Låsta sidor i minne är aktiverat. Det finns inga prestandaräknare som visar AWE-minnesanvändning (Address Windowing Extensions).
Viktigt
Kommandot DBCC MEMORYSTATUS
är avsett att vara ett diagnostikverktyg för Microsoft Support. Formatet på utdata och detaljnivån som tillhandahålls kan komma att ändras mellan Service Pack och produktversioner. Funktionerna som DBCC MEMORYSTATUS
kommandot tillhandahåller kan ersättas av en annan mekanism i senare produktversioner. I senare produktversioner kanske det här kommandot inte längre fungerar. Inga ytterligare varningar kommer att tillhandahållas innan det här kommandot ändras eller tas bort. Därför kan program som använder det här kommandot brytas utan varning.
Kommandots DBCC MEMORYSTATUS
utdata har ändrats från tidigare versioner av SQL Server. För närvarande innehåller den flera tabeller som inte var tillgängliga i tidigare produktversioner.
Använda DBCC MEMORYSTATUS
DBCC MEMORYSTATUS
används vanligtvis för att undersöka problem med låg minnesanvändning som rapporteras av SQL Server. Lite minne kan uppstå om det finns antingen externt minnestryck utanför SQL Server process eller internt tryck som kommer från processen. Internt tryck kan orsakas av SQL Server databasmotor eller av andra komponenter som körs i processen (till exempel länkade servrar, XPs, SQLCLR, intrångsskydd eller antivirusprogram). Mer information om hur du felsöker minnesbelastning finns i Felsöka problem med minnesbrist eller minnesbrist i SQL Server.
Här är de allmänna stegen för att använda kommandot och tolka dess resultat. Specifika scenarier kan kräva att du närmar dig utdata lite annorlunda, men den övergripande metoden beskrivs här.
- Kör kommandot
DBCC MEMORYSTATUS
. - Använd avsnitten Process/System Counts och Memory Manager för att fastställa om det finns externt minnestryck (till exempel att datorn har ont om fysiskt eller virtuellt minne eller SQL Server arbetsuppsättningen är utspnad). Använd också de här avsnitten för att avgöra hur mycket minne som SQL Server databasmotorn har allokerat i jämförelse med systemets totala minne.
- Om du fastställer att det finns ett externt minnestryck kan du försöka minska minnesanvändningen av andra program och av operativsystemet eller lägga till mer RAM-minne.
- Om du fastställer att den SQL Server motorn använder det mesta av minnet (internt minnestryck) kan du använda de återstående avsnitten
DBCC MEMORYSTATUS
i för att identifiera vilka komponenter (minnesbiträde, cachelagring, UserStore eller Objectstore) som är den största bidragsgivaren till den här minnesanvändningen. - Granska varje komponent:
MEMORYCLEARK
,CACHESTORE
,USERSTORE
ochOBJECTSTORE
. Undersök värdet Sidallokerat för att avgöra hur mycket minne komponenten förbrukar i SQL Server. En kort beskrivning av de flesta minneskomponenter för databasmotorn finns i tabellen Minnesbiträdestyper .- I sällsynta fall är allokeringen en direkt virtuell allokering i stället för att gå igenom SQL Server minneshanteraren. I dessa fall undersöker du värdet för den virtuella datorn som checkats in under den specifika komponenten i stället för Tilldelade sidor.
- Om datorn använder NUMA delas vissa minneskomponenter ut per nod. Du kan till exempel observera
OBJECTSTORE_LOCK_MANAGER (node 0)
,OBJECTSTORE_LOCK_MANAGER (node 1)
,OBJECTSTORE_LOCK_MANAGER (node 2)
och så vidare och slutligen observera ett summerat värde för varje nod iOBJECTSTORE_LOCK_MANAGER (Total)
. Det bästa stället att börja på är i avsnittet som rapporterar det totala värdet och sedan undersöker uppdelningen efter behov. Mer information finns i Minnesanvändning med NUMA-noder.
- Vissa avsnitt innehåller
DBCC MEMORYSTATUS
detaljerad och specialiserad information om särskilda minnesallokerare. Du kan använda dessa avsnitt för att förstå ytterligare information och se en ytterligare uppdelning av allokeringarna inom en minnestjänsteman. Exempel på sådana avsnitt är buffertpool (data och indexcache), cachelagring/plancache för procedurer, frågeminnesobjekt (minnestillslag), optimeringskö och små och medelstora och stora gatewayer (optimerar minne). Om du redan vet att en viss komponent i minnet i SQL Server är källan till minnesbelastningen kanske du föredrar att gå direkt till det specifika avsnittet. Om du till exempel har fastställt på något annat sätt att det finns en hög användning av minnestilldelningar som orsakar minnesfel, kan du granska avsnittet Frågeminnesobjekt .
Resten av den här artikeln beskriver några av de användbara räknarna DBCC MEMORYSTATUS
i utdata som gör att du kan diagnostisera minnesproblem mer effektivt.
Antal processer/system
Det här avsnittet innehåller ett exempel på utdata i tabellformat och beskriver dess värden.
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
I följande lista beskrivs värden och deras beskrivningar:
- Tillgängligt fysiskt minne: Det här värdet visar den totala mängden ledigt minne på datorn. I exemplet är det lediga minnet 5 060 247 552 byte.
- Tillgängligt virtuellt minne: Det här värdet visar den totala mängden ledigt virtuellt minne för SQL Server processen är 140 710 048 014 336 byte (128 TB). Mer information finns i Minnes- och adressutrymmesgränser.
- Tillgänglig växlingsfil: Det här värdet visar det kostnadsfria växlingsfilutrymmet. I exemplet är värdet 7 066 804 224 byte.
- Arbetsuppsättning: Det här värdet visar den totala mängden virtuellt minne som SQL Server processen har i RAM-minne (är inte utspridd) är 430 026 752 byte.
- Procent av allokerat minne i WS: Det här värdet visar vilken procentandel av SQL Server allokerat virtuellt minne finns i RAM(eller är Arbetsuppsättning). Värdet på 100 procent visar att allt incheckat minne lagras i RAM-minnet och att 0 procent av det är utsålt.
- Sidfel: Det här värdet visar den totala mängden hårda och mjuka sidfel för SQL Server. I exemplet är värdet 151 138.
De återstående fyra värdena är binära eller booleska.
- Systemets fysiska minne med värdet 1 anger att SQL Server anser att det tillgängliga fysiska minnet på datorn är högt. Det är därför värdet för System fysiskt minne låg är 0, vilket innebär inget lågt minne. Liknande logik tillämpas på Låg fysiskt minne och Låg processminne, där 0 innebär att det är falskt och 1 innebär att det är sant. I det här exemplet är båda värdena 0, vilket innebär att det finns gott om fysiskt och virtuellt minne för SQL Server processen.
Minneshanteraren
Det här avsnittet innehåller ett exempel på utdata från Minneshanteraren som visar den totala minnesförbrukningen per SQL Server.
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
I följande lista beskrivs värden i utdata och deras beskrivningar:
Reserverad virtuell dator: Det här värdet visar den totala mängden virtuellt adressutrymme (VAS) eller virtuellt minne (VM) som SQL Server har reserverat. Virtuell minnesreservation använder faktiskt inte fysiskt minne. det innebär helt enkelt att virtuella adresser är reserverade från den stora VAS. Mer information finns i VirtualAlloc(), MEM_RESERVE.
Bekräftad virtuell dator: Det här värdet visar den totala mängden virtuellt minne (VM) som SQL Server har checkat in (i KB). Det innebär att minnet som används av processen backas upp av fysiskt minne eller mindre ofta av en sidfil. De tidigare reserverade minnesadresserna backas nu upp av ett fysiskt lagringsutrymme. det är de allokeras. Om Låsta sidor i minnet är aktiverat använder SQL Server en alternativ metod för att allokera minne, AWE API och de flesta minnet återspeglas inte i den här räknaren. Se [Låsta sidor allokerade](#Locked allokerade sidor) för dessa allokeringar. Mer information finns i VirtualAlloc(), MEM_COMMIT.
Allokerade sidor: Det här värdet visar det totala antalet minnessidor som allokeras av SQL Server databasmotor.
Allokerade låsta sidor: Det här värdet representerar mängden minne i kilobyte (KB) som SQL Server har allokerat och låst i fysiskt RAM-minne med hjälp av AWE-API:et. Den anger hur mycket minne SQL Server aktivt använder och har begärt att sparas i minnet för att optimera prestanda. Genom att låsa sidor i minnet säkerställer SQL Server att kritiska databassidor är lättillgängliga och inte växlas till disk. Mer information finns i AWE-minne (Address Windows Extensions). Värdet noll anger att funktionen "låsta sidor i minnet" för närvarande är inaktiverad och SQL Server använder virtuellt minne i stället. I så fall representerar värdet för den virtuella datorn som checkats in det minne som allokerats till SQL Server.
Stora sidor allokerade: Det här värdet representerar mängden minne som allokeras av SQL Server med hjälp av stora sidor. Stora sidor är en minneshanteringsfunktion som tillhandahålls av operativsystemet. I stället för att använda standardsidans storlek (vanligtvis 4 KB) använder den här funktionen en större sidstorlek, till exempel 2 MB eller 4 MB. Värdet noll anger att funktionen inte är aktiverad. Mer information finns i Virtual Alloc(), MEM_LARGE_PAGES.
Target Committed: Det här värdet anger den målmängd minne som SQL Server syftar till att ha checkat in, en idealisk mängd minne SQL Server kan förbruka, baserat på den senaste arbetsbelastningen.
Aktuellt bekräftat: Det här värdet anger mängden av operativsystemets minne (i KB) som SQL Server minneshanteraren för närvarande har checkat in (allokerat i det fysiska arkivet). Det här värdet innehåller antingen "låsta sidor i minnet" (AWE API) eller virtuellt minne. Därför är det här värdet nära eller detsamma som vm-bekräftade eller låsta sidor allokerade. Observera att när SQL Server använder AWE-API:et allokeras en del minne fortfarande av operativsystemets Virtual Memory Manager och kommer att återspeglas som VM-bekräftad.
NUMA-tillväxtfas: Det här värdet anger om SQL Server för närvarande är i en NUMA-tillväxtfas. Mer information om den här inledande minnesuppramningen när NUMA-noder finns på datorn finns i How It Works: SQL Server (NUMA Local, Foreign and Away Memory Blocks).
Senaste OS-fel: Det här värdet visar det senaste OS-felet som uppstod när det uppstod ett minnestryck på systemet. SQL Server registrerar os-felet och visar det i utdata. En fullständig lista över OS-fel finns i Systemfelkoder.
Minnesanvändning med NUMA-noder
Avsnittet Memory Manager följs av en sammanfattning av minnesanvändningen för varje minnesnod. I ett NUMA-aktiverat system (non-uniform memory access) finns det en motsvarande minnesnodpost för varje NUMA-maskinvarunod. I ett SMP-system finns det en enda minnesnodpost. Samma mönster tillämpas på andra minnesavsnitt.
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
Obs!
- Värdet
Memory node Id
kanske inte motsvarar maskinvarunod-ID:t. - Dessa värden visar det minne som allokeras av trådar som körs på den här NUMA-noden. Dessa värden är inte det minne som är lokalt för NUMA-noden.
- Summorna för reserverade värden för virtuella datorer och de vm-bekräftade värdena på alla minnesnoder är något mindre än motsvarande värden som rapporteras i memory manager-tabellen.
- NUMA-noden 64 (nod 64) är reserverad för DAC och är sällan av intresse för minnesundersökning eftersom den här anslutningen använder begränsade minnesresurser. Mer information om dedikerad administratörsanslutning (DAC) finns i Diagnostikanslutning för databasadministratörer.
I följande lista beskrivs värden i utdatatabellen och deras beskrivningar:
- Reserverad virtuell dator: Visar det virtuella adressutrymmet (VAS) som är reserverat av trådar som körs på den här noden.
- Virtuell dator bekräftad: Visar vas som har checkats in av trådar som körs på den här noden.
Aggregerat minne
Följande tabell innehåller aggregerad minnesinformation för varje kontoristtyp och NUMA-nod. För ett NUMA-aktiverat system kan du se utdata som liknar följande:
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
Värdet Pages Allocated
för visar det totala antalet minnessidor som allokeras till av en specifik komponent (minnesbiträde, användararkiv, objektarkiv eller cachelagring).
Obs!
Dessa nod-ID:n motsvarar NUMA-nodkonfigurationen för den dator som kör SQL Server. Nod-ID:n inkluderar möjliga NUMA-noder för programvara som definieras ovanpå NUMA-maskinvarunoder eller ovanpå ett SMP-system. Information om hur du hittar mappning mellan nod-ID:er och processorer för varje nod finns i Information Händelse-ID 17152. Den här händelsen loggas i programloggen i Loggboken när du startar SQL Server.
För ett SMP-system ser du bara en tabell för varje kontoristtyp, utan att räkna noden = 64 som används av DAC. Den här tabellen liknar följande exempel.
MEMORYCLERK_SQLGENERAL (Total) KB
--------------------------------- --------------------
VM Reserved 0
VM Committed 0
AWE Allocated 0
SM Reserved 0
SM Commited 0
Pages Allocated 2928
Annan information i dessa tabeller handlar om delat minne:
- RESERVERAD SM: Visar den VAS som är reserverad av alla kontorister av den här typen som använder API:et för minnesmappade filer. Det här API:et kallas även delat minne.
- SM Committed: Visar vas som har checkats in av alla kontorister av den här typen som använder API:et för minnesmappade filer.
Som en alternativ metod kan du hämta sammanfattningsinformation för varje kontoristtyp för alla minnesnoder med hjälp av sys.dm_os_memory_clerks dynamisk hanteringsvy (DMV). Det gör du genom att köra följande fråga:
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
Information om buffertpool
Det här är ett viktigt avsnitt som ger en uppdelning av olika tillståndsdata och indexsidor i buffertpoolen, även kallat datacachen. I följande utdatatabell visas information om buffertpoolen och annan information.
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
I följande lista beskrivs värden i utdata och deras beskrivningar:
- Databas: Visar antalet buffertar (sidor) som har databasinnehåll (data och indexsidor).
- Mål: Visar målstorleken för buffertpoolen (buffertantal). Se Mål för bekräftat minne i föregående avsnitt i den här artikeln.
- Felaktig: Visar de sidor som har databasinnehåll och har ändrats. Dessa buffertar innehåller ändringar som vanligtvis måste tömmas till disk av kontrollpunktsprocessen.
- I I/O: Visar buffertar som väntar på en väntande I/O-åtgärd. Det innebär att innehållet på dessa sidor antingen skrivs till eller läses från lagringen.
- Spärr: Visar de låsta buffertarna. En buffert låses när en tråd läser eller ändrar innehållet på en sida. En buffert är också låst när sidan läses från disk eller skrivs till disk. En spärr används för att upprätthålla den fysiska konsekvensen för data på sidan när de läses eller ändras. Däremot används ett lås för att upprätthålla logisk och transaktionell konsekvens.
- I/O-fel: Visar antalet buffertar som kan ha påträffat I/O-relaterade OS-fel (detta indikerar inte nödvändigtvis ett problem).
- Förväntad sidlivslängd: Den här räknaren mäter hur lång tid i sekunder som den äldsta sidan har stannat kvar i buffertpoolen.
Du kan hämta detaljerad information om buffertpoolen för databassidor med hjälp av DMV:n sys.dm_os_buffer_descriptors
. Men använd denna DMV med försiktighet eftersom den kan köras länge och producera enorma utdata om din SQL Server-baserade server får ha massor av RAM till sitt förfogande.
Planera cache
I det här avsnittet beskrivs plancachen som tidigare kallades en procedurcache.
Procedure Cache Value
----------------------- -----------
TotalProcs 4
TotalPages 25
InUsePages 0
I följande lista beskrivs värden i utdata och deras beskrivningar:
TotalProcs: Det här värdet visar det totala antalet cachelagrade objekt som för närvarande finns i procedurens cacheminne. Det här värdet matchar antalet poster i DMV:n
sys.dm_exec_cached_plans
.Obs!
På grund av den här informationens dynamiska karaktär kanske matchningen inte är exakt. Du kan använda PerfMon för att övervaka SQL Server: Planera cacheobjekt och
sys.dm_exec_cached_plans
DMV för detaljerad information om typen av cachelagrade objekt, till exempel utlösare, procedurer och ad hoc-objekt.TotalPages: Visar de kumulativa sidor som används för att lagra alla cachelagrade objekt i plan- eller procedurcachen. Du kan multiplicera det här talet med 8 kB för att få värdet uttryckt i KB.
InUsePages: Visar sidorna i procedurens cacheminne som tillhör procedurer som för närvarande är aktiva. Dessa sidor kan inte ignoreras.
Globala minnesobjekt
Det här avsnittet innehåller information om olika globala minnesobjekt och mängden minne som de använder.
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
I följande lista beskrivs värden i utdata och deras beskrivningar:
- Resurs: Visar det minne som resursobjektet använder. Den används av lagringsmotorn för olika serveromfattande strukturer.
- Lås: Visar det minne som används av Låshanteraren.
- XDES: Visar det minne som används av Transaktionshanteraren.
- SETLS: Visar det minne som används för att allokera den lagringsmotorspecifika strukturen per tråd som använder trådlokal lagring (TLS). Mer information finns i Trådlokal lagring.
- SubpDesc-allokerare: Visar det minne som används för att hantera underprocesser för parallella frågor, säkerhetskopieringsåtgärder, återställningsåtgärder, databasåtgärder, filåtgärder, spegling och asynkrona markörer. Dessa underprocesser kallas även "parallella processer".
- SE SchemaManager: Visar det minne som Schemahanteraren använder för att lagra lagringsmotorspecifika metadata.
- SQLCache: Visar det minne som används för att spara texten i ad hoc- och förberedda instruktioner.
- Replikering: Visar det minne som servern använder för interna replikeringsundersystem.
- ServerGlobal: Visar det globala serverminnesobjektet som används allmänt av flera undersystem.
- XP Global: Visar det minne som används av de utökade lagrade procedurerna.
- SortTables: Visar det minne som används av sorteringstabellerna.
Fråga minnesobjekt
I det här avsnittet beskrivs information om beviljande av frågeminne. Den innehåller också en ögonblicksbild av frågans minnesanvändning. Frågeminne kallas även "arbetsyteminne".
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
Om storleken och kostnaden för en fråga uppfyller tröskelvärdena för "litet" frågeminne placeras frågan i en liten frågekö. Det här beteendet förhindrar att mindre frågor fördröjs bakom större frågor som redan finns i kön.
I följande lista beskrivs värden i utdata och deras beskrivningar:
- Beviljar: Visar antalet frågor som körs som har minnestillslag.
- Väntar: Visar antalet frågor som väntar på att få minnestillslag.
-
Tillgänglig: Visar de buffertar som är tillgängliga för frågor för användning som hash-arbetsyta och sorteringsarbetsyta. Värdet
Available
uppdateras regelbundet. - Nästa begäran: Visar storleken på minnesbegäran i buffertar för nästa väntande fråga.
-
Väntar på: Visar mängden minne som måste vara tillgängligt för att köra frågan som värdet Nästa begäran refererar till. Värdet Väntar på är värdet
Next Request
multiplicerat med en utrymmesfaktor. Det här värdet garanterar effektivt att en viss mängd minne blir tillgängligt när nästa väntande fråga körs. - Kostnad: Visar kostnaden för nästa väntande fråga.
- Timeout: Visar tidsgränsen i sekunder för nästa väntande fråga.
- Väntetid: Visar den förflutna tiden, i millisekunder, eftersom nästa väntande fråga placerades i kön.
- Aktuellt maxvärde: Visar den totala minnesgränsen för frågekörning. Det här värdet är den kombinerade gränsen för både den stora frågekön och den lilla frågekön.
Mer information om vad minnestillskott är, vad dessa värden innebär och hur du felsöker minnestillskott finns i Felsöka problem med långsam prestanda eller minnesbrist som orsakas av minnestillskott i SQL Server.
Optimeringsminne
Frågor skickas till servern för kompilering. Kompileringsprocessen omfattar parsning, algebraisering och optimering. Frågor klassificeras baserat på det minne som varje fråga förbrukar under kompileringsprocessen.
Obs!
Den här mängden innehåller inte det minne som krävs för att köra frågan.
När en fråga startar finns det ingen gräns för hur många frågor som kan kompileras. När minnesförbrukningen ökar och når ett tröskelvärde måste frågan skicka en gateway för att fortsätta. Det finns en gradvis minskande gräns för samtidiga kompilerade frågor efter varje gateway. Storleken på varje gateway beror på plattformen och belastningen. Gatewaystorlekar väljs för att maximera skalbarhet och dataflöde.
Om frågan inte kan skicka en gateway väntar den tills minnet är tillgängligt eller returnerar ett timeout-fel (fel 8628). Dessutom kanske frågan inte hämtar en gateway om du avbryter frågan eller om ett dödläge identifieras. Om frågan skickar flera gatewayer släpper den inte de mindre gatewayerna förrän kompileringsprocessen har slutförts.
Med det här beteendet kan bara ett fåtal minnesintensiva kompileringar utföras samtidigt. Dessutom maximerar det här beteendet dataflödet för mindre frågor.
Nästa tabell innehåller information om minnesväntningar som uppstår på grund av otillräckligt minne för frågeoptimering. Det interna minnet står för optimerarminnet som används av systemfrågor, medan standardvärdet rapporterar optimeringsminne för användar- eller programfrågor.
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
Här är en beskrivning av några av följande värden:
- Konfigurerade enheter – Anger antalet samtidiga frågor som kan använda kompileringsminne från gatewayen. I exemplet kan 32 samtidiga frågor använda minne från den lilla gatewayen (standard), åtta samtidiga frågor från medelgatewayen och en fråga från big gateway. Som tidigare nämnts, om en fråga behöver mer minne än vad den lilla gatewayen kan allokera, skulle den gå till Medelgateway och den frågan räknas ha tagit en enhet i båda gatewayerna. Ju större mängd kompileringsminne en fråga behöver, desto färre konfigurerade enheter i en gateway.
-
Tillgängliga enheter – Anger antalet platser eller enheter som är tillgängliga för samtidiga frågor som ska kompileras från listan över konfigurerade enheter. Om till exempel 32 enheter är tillgängliga, men tre frågor för närvarande använder kompileringsminne, skulle det
Available Units
vara 32 minus 3 eller 29 enheter. - Hämtar – anger antalet enheter eller platser som hämtats av frågor som ska kompileras. Om tre frågor för närvarande använder minne från en gateway, hämtas = 3.
- Servitörer – anger hur många frågor som väntar på kompileringsminne i en gateway. Om alla enheter i en gateway är slut är värdet Servitörer inte noll som visar antalet väntande frågor.
- Tröskelvärde – Anger en gräns för gatewayminne som avgör var en fråga hämtar sitt minne från eller vilken gateway den stannar i. Om en fråga inte behöver mer än tröskelvärdet stannar den i den lilla gatewayen (en fråga börjar alltid med den lilla gatewayen). Om den behöver mer minne för kompilering går den till den medelstora, och om tröskelvärdet fortfarande är otillräckligt går det till den stora gatewayen. För den lilla gatewayen är tröskelvärdet 380 000 byte (kan komma att ändras i framtida versioner) för x64-plattformen.
- Tröskelfaktor: Avgör tröskelvärdet för varje gateway. Eftersom tröskelvärdet är fördefinierat för den lilla gatewayen anges även faktorn till samma värde. Tröskelvärdet för den medelstora och stora gatewayen är bråkdelar av det totala optimerarminnet (övergripande minne i optimeringskö) och är inställda på 12 respektive 8. Så om det totala minnet justeras eftersom andra SQL Server minneskonsumenter kräver minne, skulle tröskelvärdena göra att tröskelvärdena också justeras dynamiskt.
-
Timeout: Anger värdet i minuter som definierar hur länge en fråga väntar på optimerarens minne. Om det här timeout-värdet nås slutar sessionen att vänta och genererar fel 8628 –
A time out occurred while waiting to optimize the query. Rerun the query.
Meddelandeköer för minne
Det här avsnittet innehåller information om koordinatorer för minne som styr cachelagrat minne, stulet minne och reserverat minne. Du kan endast använda informationen i dessa tabeller för intern diagnostik. Den här informationen är därför inte detaljerad.
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