Kommentar
Å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: 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 SQL Server 2025 (17.x) kan du använda resursguvernören för att framtvinga en gräns för den totala mängden tempdb utrymme som förbrukas av en arbetsbelastningsgrupp. 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 arbetsbelastningsgruppens gräns tillämpas.
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 hjälp
GROUP_MAX_TEMPDB_DATA_MBav argumentet .Använd den fasta gränsen när du känner till arbetsbelastningens
tempdbanvändningskrav i förväg eller närtempdbstorleken inte ändras.Ange en procentgräns med hjälp
GROUP_MAX_TEMPDB_DATA_PERCENTav argumentet .Använd procentgränsen när du kan ändra den maximala storleken över tid och du vill att utrymmet
tempdbsom är tillgängligt för varje arbetsbelastningsgrupp ska ändras proportionellt utan att ändra konfigurationen förtempdbarbetsbelastningsgrupper. Om du till exempel skalar upp en virtuell Azure-dator som kör SQL Server och ökar den maximalatempdbstorleken ökar även dettempdbtillgängliga utrymmet för varje arbetsbelastningsgrupp med en procentgräns.
Mer information om argumenten GROUP_MAX_TEMPDB_DATA_MB och GROUP_MAX_TEMPDB_DATA_PERCENT finns i CREATE WORKLOAD GROUP eller ALTER WORKLOAD GROUP.
Om du anger både fasta gränser och procentgränser 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. Information om hur du visar effektiva gränser finns i exemplet Visa effektiva tempdb-utrymmesgränser per arbetsbelastningsgrupp .
Konfiguration av procentgräns
När du kör satsen ALTER RESOURCE GOVERNOR RECONFIGURE gäller procentgränser enligt 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 MAXSIZE är det inte UNLIMITED– För samtliga datafiler är FILEGROWTH 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ällt– För alla datafiler är MAXSIZEUNLIMITED– För alla datafiler FILEGROWTH är noll |
tempdb datafiler är i förväg utökade till sin avsedda storlek och kan inte utökas ytterligare |
Summan av SIZE värden för alla datafiler |
Ja |
| Alla andra konfigurationer | Nej |
Information om hur du visar konfigurationen tempdb finns i konfigurationsexemplet Visa tempdb-datafil .
Tänk på följande när du använder procentgränser:
Om du anger
GROUP_MAX_TEMPDB_DATA_PERCENToch kör RECONFIGURE-instruktionenALTER RESOURCE GOVERNOR, 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 varningsmeddelandet 10989, allvarlighetsgrad 10, som också loggas i felloggen:GROUP_MAX_TEMPDB_DATA_PERCENT is not in effect because tempdb configuration requirements aren't met.Om du vill att procentgränserna ska vara effektiva konfigurerar
tempdbdu om datafilerna så att de uppfyller kraven och körALTER RESOURCE GOVERNOR RECONFIGUREigen. Mer information om hur du konfigurerarSIZE,FILEGROWTHochMAXSIZE, finns i ALTER DATABASE Fil- och filgruppsalternativ.Om en procentgräns gäller och du lägger till, tar bort eller ändrar storlek på
tempdbdatafiler måste du köraALTER RESOURCE GOVERNOR RECONFIGUREför att uppdatera resursguvernören med den nya maximala storlekentempdb(100%).
Anmärkning
För en ny SQL Server instans är MAXSIZE datafilen UNLIMITED och FILEGROWTH är större än noll, vilket innebär att procentgränserna inte är effektiva. Om du vill använda procentgränser måste du antingen:
- Förväxa
tempdbdatafiler till deras avsedda storlekar och ställ inFILEGROWTHpå noll. -
MAXSIZEAnge ett begränsat värde för varje datafil. - För varje
tempdbdatafilvolym kontrollerar du att summan avMAXSIZEvä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åtempdbdatafiler görMAXSIZEdu varje fil till 50 GB eller mindre.
Så här fungerar det
I det här avsnittet beskrivs styrning av utrymmesresurser tempdb i detalj.
När datasidor i
tempdballokeras och frigörs, för resursguvernören register över dettempdbutrymme som förbrukas av varje arbetsbelastningsgrupp.Om resursguvernören är aktiverad och en
tempdbutrymmesfö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 totalatempdbutrymmesförbrukningen av gruppen över gränsen, avbryts begäran med fel 1138, allvarlighetsgrad 17:Could not allocate a new page for database 'tempdb' because that would exceed the limit set for workload group 'workload-group-name'".När en begäran avbryts med fel 1138 ökas värdet i kolumnen i
total_tempdb_data_limit_violation_countsys.dm_resource_governor_workload_groups dynamiska hanteringsvyn (DMV) med en och dentempdb_data_workload_group_limit_reachedutökade händelsen utlöses.Resursguvernören håller reda på all
tempdbanvändning som kan hänföras till en arbetsbelastningsgrupp, inklusive tillfälliga tabeller, variabler (inklusive tabellvariabler), tabellvärdesparametrar, icke-temporära tabeller, markörer ochtempdbanvä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
tempdbredovisas 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
tempdbför varje arbetsbelastningsgrupp visas i sys.resource_governor_workload_groups katalogvyn i kolumnernagroup_max_tempdb_data_mbochgroup_max_tempdb_data_percent.Den aktuella förbrukningen och den högsta förbrukningen av
tempdbutrymme av en arbetsbelastningsgrupp exponeras i sys.dm_resource_governor_workload_groups DMV, i respektive kolumnertempdb_data_space_kbochpeak_tempdb_data_space_kb.Tips/Råd
tempdb_data_space_kbochpeak_tempdb_data_space_kbkolumner i sys.dm_resource_governor_workload_groups bibehålls även om inga gränser förtempdbutrymmesförbrukning har angetts.Du kan skapa klassificerarfunktionen och arbetsbelastningsgrupperna utan att först ange några gränser. Övervaka
tempdbanvändningen per grupp över tid för att upprätta representativa användningsmönster och ange sedan gränser efter behov.tempdbanvä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
tempdbredovisas 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.tempdblagringsutrymmesredovisning 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.tempdbstyrning av utrymmesresurser styr utrymmet itempdbdatafiler, men inte diskutrymmet på de underliggande volymerna. Om du inte utökartempdbdatafilerna i förväg till deras avsedda storlekar kan utrymmet på de volymer därtempdbde finns förbrukas av andra filer. Om det inte finns något återstående utrymme förtempdbdatafiler att växa, kan dettempdbta slut på utrymme innan någon arbetsbelastningsgruppsgräns förtempdbutrymmesförbrukning nås.Utrymmesresursstyrning i
tempdbgäller för datafiler men inte transaktionsloggfilen. Aktiveratempdbi 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 från den här DMV:en inte matchar exakt statistiken från 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
tempdbinte utrymmesanvändningen för de uppgifter som körs just nu. Statistik isys.dm_db_session_space_usageuppdateras när en uppgift har slutförts. Statistik isys.dm_resource_governor_workload_groupsuppdateras kontinuerligt. - IAM-sidor (indexallokeringskarta) spåras inte. Mer information finns i guide för sid- och omfattningsarkitektur.
- Återspeglar
- När rader har tagits bort, eller när en tabell, ett index eller en partition tas bort eller trunkeras, frigör databasmotorn datasidorna. Frigöringen kan ske synkront eller utföras av en asynkron bakgrundsprocess.
sys.dm_resource_governor_workload_groupsvisar 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
tempdbutrymmesförbrukningsgränsen till ett litet värde eller noll, särskilt fördefaultarbetsbelastningsgruppen. Om du anger den här gränsen till ett litet värde eller noll 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ördefaultarbetsbelastningsgruppen kanske du inte kan öppna Object Explorer i SQL Server Management Studio (SSMS).Om du inte skapar anpassade arbetsbelastningsgrupper och en klassificerarfunktion som placerar arbetsbelastningar i sina dedikerade grupper bör du undvika att
tempdbbegränsa användningen avdefaultarbetsbelastningsgruppen. Om du begränsartempdbutrymmesförbrukningen fördefaultarbetsbelastningsgruppen kan frågor returnera fel 1138. Det här felet uppstår närtempdbdet fortfarande finns oanvänt utrymme som inte kan användas av någon användararbetsbelastning.Summan av
GROUP_MAX_TEMPDB_DATA_MBvärden för alla arbetsbelastningsgrupper kan överskrida den maximalatempdbstorleken. Om den maximalatempdbstorleken till exempel är 100 GBGROUP_MAX_TEMPDB_DATA_MBkan 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
tempdbgenom att lämna 20 GB för andra arbetsbelastningsgrupper. Samtidigt undviker du onödiga fråge aborter när ledigttempdbutrymme fortfarande är tillgängligt eftersom arbetsbelastningsgrupperna A och B sannolikt inte förbrukar myckettempdbutrymme samtidigt.På samma sätt kan summan av
GROUP_MAX_TEMPDB_DATA_PERCENTvärdena för alla arbetsbelastningsgrupper överstiga 100 procent. Du kan allokera mertempdbutrymme till varje grupp om du vet att flera grupper sannolikt inte kommer att orsaka högtempdbanvändning samtidigt.
Examples
Visa konfiguration av tempdb-datafil
Följande fråga visar 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å ärMAXSIZEUNLIMITED. - När antingen
filegrowth_mbellerfilegrowth_percentär noll är detFILEGROWTHnoll.
Visa effektiva tempdb-utrymmesgränser per arbetsbelastningsgrupp
Följande fråga visar den effektiva tempdb utrymmesförbrukningsgränsen för varje arbetsbelastningsgrupp. Gränsen returneras i megabyte för konfiguration av antingen fast gräns eller procentgräns .
Om kolumnen group_effective_limit_mb är NULLbetyder det något av följande:
- Varken fast eller procentgräns har konfigurerats.
- Kraven för att använda procentgränskonfigurationen uppfylls inte.
SELECT wg.group_id,
wg.name,
tf.tempdb_max_size_mb,
CASE
WHEN wg.group_max_tempdb_data_mb IS NOT NULL
THEN wg.group_max_tempdb_data_mb
WHEN wg.group_max_tempdb_data_percent IS NOT NULL AND tf.tempdb_max_size_mb IS NOT NULL
THEN 0.01 * wg.group_max_tempdb_data_percent * tf.tempdb_max_size_mb
ELSE NULL END AS group_effective_limit_mb
FROM sys.resource_governor_workload_groups AS wg
CROSS APPLY (
SELECT IIF (SUM(IIF (max_size <> -1
AND growth > 0, 1, 0)) = COUNT(1) /* autogrow up to the maxsize */
OR SUM(IIF (max_size = -1
AND growth = 0, 1, 0)) = COUNT(1), /* pregrown and fixed */
SUM(IIF (growth = 0, size, max_size)) * 8 / 1024., NULL) AS tempdb_max_size_mb
FROM sys.master_files
WHERE database_id = 2
AND type_desc = 'ROWS'
) AS tf;
Nästa steg
Relaterat innehåll
- Resursguvernör
- Självstudiekurs: konfigurationsexempel och bästa praxis för Resource Governor
- ALTER RESOURCE GOVERNOR (Transact-SQL)
- CREATE WORKLOAD GROUP (Transact-SQL)
- ALTER WORKLOAD GROUP (Transact-SQL)
- DROP WORKLOAD GROUP (Transact-SQL)
- sys.resource_governor_workload_groups
- sys.dm_resource_governor_workload_groups