Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: Förhandsversion av SQL Server 2025 (17.x) och senare versioner
När du aktiverar tempdb
styrning av utrymmesresurser förbättrar du tillförlitligheten och undviker avbrott genom att förhindra att skenande frågor eller arbetsbelastningar förbrukar stora mängder utrymme i tempdb
.
Från och med förhandsversionen av SQL Server 2025 (17.x) kan du använda resource governor för att framtvinga en gräns för den totala mängden tempdb
utrymme som förbrukas av en arbetsbelastningsgrupp. En arbetsbelastningsgrupp kan associeras med ett program, en användare, en grupp användare osv. När en begäran (en fråga) försöker överskrida gränsen avbryter resursguvernören den med ett tydligt fel som anger att gränsen för arbetsbelastningsgruppen har tillämpats.
I själva verket kan du partitionera den delade tempdb
-utrymmet mellan olika arbetsbelastningar. Du kan till exempel ange en högre gräns för en arbetsbelastningsgrupp som används av ett verksamhetskritiskt program och ange en lägre gräns för den default
arbetsbelastningsgrupp som används av alla andra arbetsbelastningar.
Stegvisa konfigurationsexempel finns i Självstudie: Exempel för att konfigurera tempdb-resursstyrning för utrymme.
Kom igång med resource governor
Resource Governor tillhandahåller ett flexibelt ramverk för att ange olika tempdb
utrymmesgränser för olika program, användare, användargrupper osv. Du kan också ange gränser baserat på anpassad logik.
Om du är nybörjare på resursguvernören i SQL Server kan du läsa resursguvernören för att lära dig mer om dess begrepp och funktioner.
En genomgång och metodtips för konfiguration av resursguvernör finns i Självstudie: Konfigurationsexempel och metodtips för Resource Governor.
Ange gränser för tempdb-utrymmesförbrukning
Du kan begränsa tempdb
utrymmesförbrukningen för en arbetsbelastningsgrupp på något av två sätt:
Ange en fast gräns med argumentet
GROUP_MAX_TEMPDB_DATA_MB
.Den fasta gränsen är användbar när arbetsbelastningens
tempdb
användningskrav är kända i förväg eller närtempdb
storleken inte ändras.Ange en procentgräns med argumentet
GROUP_MAX_TEMPDB_DATA_PERCENT
.Procentgränsen är användbar när du kan ändra den maximala storleken
tempdb
över tid och du vill att utrymmet som är tillgängligt för varje arbetsbelastningsgrupp ska ändras proportionellt utan att omkonfigurera resursguvernörentempdb
. Om du till exempel skalar upp en virtuell Azure-dator som kör SQL Server och ökar den maximalatempdb
storleken ökar även dettempdb
tillgängliga utrymmet för varje arbetsbelastningsgrupp med en procentgräns.
Mer information om argumenten och GROUP_MAX_TEMPDB_DATA_MB
finns i GROUP_MAX_TEMPDB_DATA_PERCENT
SKAPA ARBETSBELASTNINGSGRUPP eller ÄNDRA ARBETSBELASTNINGSGRUPP.
Om både fasta gränser och procentgränser anges för samma arbetsbelastningsgrupp har den fasta gränsen företräde framför procentgränsen.
På en viss SQL Server-instans kan du ha en blandning av arbetsbelastningsgrupper med fasta gränser, procentgränser eller inga gränser för tempdb
utrymmesförbrukning.
Konfiguration av procentgräns
Procentgränserna gäller endast när datafilkonfigurationen tempdb
uppfyller kraven som sammanfattas i följande tabell:
Konfiguration | Beskrivning | Maxstorlek för tempdb (100%) | Procentgräns i praktiken |
---|---|---|---|
-
GROUP_MAX_TEMPDB_DATA_MB är inte inställd– För alla datafiler är MAXSIZE inte UNLIMITED – För alla datafiler, FILEGROWTH är inte noll |
tempdb datafiler kan växa upp automatiskt till sin maximala storlek |
Summan av MAXSIZE värden för alla datafiler |
Ja |
-
GROUP_MAX_TEMPDB_DATA_MB är inte inställd– För alla datafiler är MAXSIZE UNLIMITED – För alla datafiler FILEGROWTH är noll |
tempdb filerna är förutbestämda till sina avsedda storlekar och kan inte bli större |
Summan av SIZE värden för alla datafiler |
Ja |
Alla andra konfigurationer | Nej |
Med följande fråga kan du se den aktuella tempdb
datafilkonfigurationen:
SELECT file_id,
name,
size * 8. / 1024 AS size_mb,
IIF(max_size = -1, NULL, max_size * 8. / 1024) AS maxsize_mb,
IIF(is_percent_growth = 0, growth * 8. / 1024, NULL) AS filegrowth_mb,
IIF(is_percent_growth = 1, growth, NULL) AS filegrowth_percent
FROM sys.master_files
WHERE database_id = 2
AND
type_desc = 'ROWS';
För en viss fil i resultatuppsättningen:
- Om kolumnen
maxsize_mb
ärNULL
, då ärMAXSIZE
UNLIMITED
. - När antingen
filegrowth_mb
ellerfilegrowth_percent
är noll är detFILEGROWTH
noll.
Om du anger GROUP_MAX_TEMPDB_DATA_PERCENT
och kör ALTER RESOURCE GOVERNOR RECONFIGURE-instruktionen , men datafilkonfigurationen inte uppfyller kraven, slutförs instruktionen och procentgränserna lagras, men de tillämpas inte. I det här fallet får du varningsmeddelande 10989, allvarlighetsgrad 10 , GROUP_MAX_TEMPDB_DATA_PERCENT gäller inte eftersom tempdb-konfigurationskraven inte uppfylls. Meddelandet loggas också i felloggen.
Om du vill att procentgränserna ska vara effektiva konfigurerar tempdb
du om datafilerna så att de uppfyller kraven och kör ALTER RESOURCE GOVERNOR RECONFIGURE
igen. Mer information om hur du konfigurerar SIZE
, FILEGROWTH
och MAXSIZE
finns i ALTER DATABASE File and Filegroup Options (Alternativ för ALTER DATABASE-fil och filgrupp).
Anmärkning
För en ny instans av SQL Server är datafilen MAXSIZE
UNLIMITED
och FILEGROWTH
är större än noll, vilket innebär att procentsatsgränserna inte är effektiva. Om du vill använda procentgränser måste du antingen:
- Förväxa
tempdb
datafiler till deras avsedda storlekar och ställ inFILEGROWTH
på noll. -
MAXSIZE
Ange ett begränsat värde för varje datafil.För varje
tempdb
datafilvolym kontrollerar du att summan avMAXSIZE
värdena för filer på volymen är mindre än eller lika med det tillgängliga diskutrymmet på volymen.Om en volym till exempel har 100 GB ledigt utrymme och har två
tempdb
datafiler görMAXSIZE
du varje fil till 50 GB eller mindre.
Om en procentgräns gäller och du lägger till, tar bort eller ändrar storlek på tempdb
datafiler måste du köra ALTER RESOURCE GOVERNOR RECONFIGURE
för att uppdatera resursguvernören med den nya maximala storleken tempdb
(100%).
Så här fungerar det
I det här avsnittet beskrivs styrning av utrymmesresurser tempdb
i detalj.
När datasidor i
tempdb
allokeras och frigörs, för resursguvernören register över dettempdb
utrymme som förbrukas av varje arbetsbelastningsgrupp.Om resursguvernören är aktiverad och en
tempdb
utrymmesförbrukningsgräns har angetts för en arbetsbelastningsgrupp, och en begäran (en fråga) som körs i arbetsbelastningsgruppen försöker få den totalatempdb
utrymmesförbrukningen av gruppen över gränsen, avbryts begäran med fel 1138, allvarlighetsgrad 17, Det gick inte att allokera en ny sida för databasen "tempdb" eftersom det skulle överskrida den gräns som angetts för arbetsbelastningsgruppens "namn på arbetsbelastningsgrupp".När en begäran avbryts med fel 1138 ökas värdet i kolumnen i
total_tempdb_data_limit_violation_count
sys.dm_resource_governor_workload_groups dynamiska hanteringsvyn (DMV) med en och dentempdb_data_workload_group_limit_reached
utökade händelsen utlöses.Resursguvernören håller reda på all
tempdb
användning som kan hänföras till en arbetsbelastningsgrupp, inklusive tillfälliga tabeller, variabler (inklusive tabellvariabler), tabellvärdesparametrar, icke-temporära tabeller, markörer ochtempdb
användning under frågebearbetning, till exempel spooler, spill, arbetstabeller och arbetsfiler.Utrymmesförbrukning för globala temporära tabeller och icke-temporära tabeller i
tempdb
redovisas under den arbetsbelastningsgrupp som infogar den första raden i tabellen, även om sessioner i andra arbetsbelastningsgrupper lägger till, ändrar eller tar bort rader i samma tabell.De konfigurerade förbrukningsgränserna
tempdb
för varje arbetsbelastningsgrupp visas i sys.resource_governor_workload_groups katalogvyn i kolumnernagroup_max_tempdb_data_mb
ochgroup_max_tempdb_data_percent
.Den aktuella förbrukningen och den högsta förbrukningen av
tempdb
utrymme av en arbetsbelastningsgrupp exponeras i sys.dm_resource_governor_workload_groups DMV, i respektive kolumnertempdb_data_space_kb
ochpeak_tempdb_data_space_kb
.Tips/Råd
tempdb_data_space_kb
ochpeak_tempdb_data_space_kb
kolumner i sys.dm_resource_governor_workload_groups bibehålls även om inga gränser förtempdb
utrymmesförbrukning har angetts.Du kan skapa klassificerarfunktionen och arbetsbelastningsgrupperna utan att först ange några gränser. Övervaka
tempdb
användningen per grupp över tid för att upprätta representativa användningsmönster och ange sedan gränser efter behov.Tempdb
användning av versionsarkiven, inklusive det beständiga versionsarkivet (PVS) när accelererad databasåterställning (ADR) är aktiverad itempdb
, styrs inte eftersom radversioner kan användas av begäranden i flera arbetsbelastningsgrupper.Utrymmesförbrukning i
tempdb
redovisas som antalet 8 KB-datasidor som används. Även om en sida inte är helt fylld med data lägger den till 8 KB till arbetsbelastningsgruppens förbrukning.Tempdb
lagringsutrymmesredovisning underhålls under en arbetsgrupps livslängd. Om en arbetsbelastningsgrupp tas bort medan globala temporära tabeller eller icke-temporära tabeller med data som redovisas för den här arbetsbelastningsgruppen finns kvar itempdb
, så redovisas inte det utrymme som används av dessa tabeller under någon annan arbetsbelastningsgrupp.Tempdb
styrning av utrymmesresurser styr utrymmet itempdb
datafiler, men inte diskutrymmet på de underliggande volymerna. Om du inte utökartempdb
datafilerna i förväg till deras avsedda storlekar kan utrymmet på de volymer därtempdb
de finns förbrukas av andra filer. Om det inte finns något återstående utrymme förtempdb
datafiler att växa, kan dettempdb
ta slut på utrymme innan någon arbetsbelastningsgruppsgräns förtempdb
utrymmesförbrukning nås.Utrymmesresursstyrning i
tempdb
gäller för datafiler men inte transaktionsloggfilen. Aktiveratempdb
i för att säkerställa att transaktionsloggen inte förbrukar mycket utrymme.tempdb
Skillnader med utrymmesspårning på sessionsnivå
Sys.dm_db_session_space_usage DMV tillhandahåller tempdb
utrymmesallokering och frigöringsstatistik för varje session. Även om det bara finns en session i en arbetsbelastningsgrupp kanske statistik för utrymmesanvändning som tillhandahålls av denna DMV inte matchar exakt den statistik som anges i vyn sys.dm_resource_governor_workload_groups av följande skäl:
- Till skillnad från
sys.dm_resource_governor_workload_groups
,sys.dm_db_session_space_usage
:- Återspeglar
tempdb
inte utrymmesanvändningen för de uppgifter som körs just nu. Statistik isys.dm_db_session_space_usage
uppdateras när en uppgift har slutförts. Statistik isys.dm_resource_governor_workload_groups
uppdateras kontinuerligt. - IAM-sidor (indexallokeringskarta) spåras inte. Mer information finns i arkitekturguiden för sidor och omfattningar.
- Återspeglar
- När rader har tagits bort, eller när en tabell, ett index eller en partition tas bort eller beskärs, kan datasidor komma att frigöras av en asynkron bakgrundsprocess. Den här sidallokeringen kan inträffa med en fördröjning.
sys.dm_resource_governor_workload_groups
visar dessa sidfördelningar när de sker, även om sessionen som orsakade dessa frilokaliseringar stängdes och inte längre finns isys.dm_db_session_space_usage
.
Metodtips för styrning av tempdb-utrymmesresurser
Innan du konfigurerar tempdb
utrymmesresursstyrning bör du överväga följande metodtips:
Granska de allmänna metodtipsen för resursguvernören.
I de flesta scenarier bör du undvika att ange
tempdb
utrymmesförbrukningsgränsen till ett litet värde eller noll, särskilt fördefault
arbetsbelastningsgruppen. Om du gör det kan många vanliga uppgifter börja misslyckas om de behöver allokera utrymme itempdb
. Om du till exempel anger antingen den fasta gränsen eller procentgränsen till 0 fördefault
arbetsbelastningsgruppen kanske du inte kan öppna Object Explorer i SQL Server Management Studio (SSMS).Om du inte har skapat anpassade arbetsbelastningsgrupper och en klassificerarfunktion som placerar arbetsbelastningar i deras dedikerade grupper bör du undvika att
tempdb
begränsa arbetsbelastningsgruppensdefault
användning. Det kan avbryta frågor med fel 1138 när det fortfarande finns outnyttjat utrymme itempdb
som inte kan användas av någon belastning från användare.Det tillåts att summan av
GROUP_MAX_TEMPDB_DATA_MB
värden för alla arbetsbelastningsgrupper överskrider den maximalatempdb
storleken. Om den maximalatempdb
storleken till exempel är 100 GBGROUP_MAX_TEMPDB_DATA_MB
kan gränserna för arbetsbelastningsgrupp A och arbetsbelastningsgrupp B vara 80 GB vardera.Den här metoden förhindrar fortfarande att varje arbetsbelastningsgrupp förbrukar allt utrymme i
tempdb
genom att lämna 20 GB för andra arbetsbelastningsgrupper. Samtidigt undviker du onödiga fråge aborter när ledigttempdb
utrymme fortfarande är tillgängligt eftersom arbetsbelastningsgrupperna A och B sannolikt inte förbrukar myckettempdb
utrymme samtidigt.På samma sätt kan summan av
GROUP_MAX_TEMPDB_DATA_PERCENT
värdena för alla arbetsbelastningsgrupper överstiga 100 procent. Du kan allokera mertempdb
utrymme till varje grupp om du vet att flera grupper sannolikt inte kommer att orsaka högtempdb
användning samtidigt.
Relaterat innehåll
- Självstudie: Exempel för att konfigurera styrning av tempdb-utrymmesresurser
- Resursguvernör
- Självstudie: Konfigurationsexempel för resursguvernör och metodtips
- ÄNDRA RESURSGUVERNÖR
- SKAPA ARBETSBELASTNINGSGRUPP
- ÄNDRA GRUPP FÖR ARBETSBELASTNING
- TA BORT ARBETSBELASTNINGSGRUPP
- sys.resource_governor_workload_groups
- sys.dm_resource_governor_workload_groups