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
tempdbanvändningskrav är kända i förväg eller närtempdbstorleken 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 maximalatempdbstorleken ökar även dettempdbtillgä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_PERCENTSKAPA 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 MAXSIZEUNLIMITED– 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å ärMAXSIZEUNLIMITED. - När antingen
filegrowth_mbellerfilegrowth_percentär noll är detFILEGROWTHnoll.
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 MAXSIZEUNLIMITED 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
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.
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
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, 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_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 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
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 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_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 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ördefaultarbetsbelastningsgruppen 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
tempdbbegränsa arbetsbelastningsgruppensdefaultanvändning. Det kan avbryta frågor med fel 1138 när det fortfarande finns outnyttjat utrymme itempdbsom inte kan användas av någon belastning från användare.Det tillåts att summan av
GROUP_MAX_TEMPDB_DATA_MBvärden för alla arbetsbelastningsgrupper överskrider 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.
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