Dela via


Styrning av tempdb-utrymmesresurser

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är tempdb 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ören tempdb . Om du till exempel skalar upp en virtuell Azure-dator som kör SQL Server och ökar den maximala tempdb storleken ökar även det tempdb 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_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 är NULL, då är MAXSIZEUNLIMITED.
  • När antingen filegrowth_mb eller filegrowth_percent är noll är det FILEGROWTH 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 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 tempdb datafiler till deras avsedda storlekar och ställ in FILEGROWTH på noll.
  • MAXSIZE Ange ett begränsat värde för varje datafil.
    • För varje tempdb datafilvolym kontrollerar du att summan av MAXSIZE 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ör MAXSIZE 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 det tempdb 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 totala tempdb 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_countsys.dm_resource_governor_workload_groups dynamiska hanteringsvyn (DMV) med en och den tempdb_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 och tempdb 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 kolumnerna group_max_tempdb_data_mb och group_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 kolumner tempdb_data_space_kb och peak_tempdb_data_space_kb.

    Tips/Råd

    tempdb_data_space_kb och peak_tempdb_data_space_kb kolumner i sys.dm_resource_governor_workload_groups bibehålls även om inga gränser för tempdb 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 i tempdb, 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 i tempdb, så redovisas inte det utrymme som används av dessa tabeller under någon annan arbetsbelastningsgrupp.

  • Tempdb styrning av utrymmesresurser styr utrymmet i tempdb datafiler, men inte diskutrymmet på de underliggande volymerna. Om du inte utökar tempdb datafilerna i förväg till deras avsedda storlekar kan utrymmet på de volymer där tempdb de finns förbrukas av andra filer. Om det inte finns något återstående utrymme för tempdb datafiler att växa, kan det tempdb ta slut på utrymme innan någon arbetsbelastningsgruppsgräns för tempdb utrymmesförbrukning nås.

  • Utrymmesresursstyrning i tempdb gäller för datafiler men inte transaktionsloggfilen. Aktivera tempdb 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 i sys.dm_db_session_space_usage uppdateras när en uppgift har slutförts. Statistik i sys.dm_resource_governor_workload_groups uppdateras kontinuerligt.
    • IAM-sidor (indexallokeringskarta) spåras inte. Mer information finns i arkitekturguiden för sidor och omfattningar.
  • 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 i sys.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ör default arbetsbelastningsgruppen. Om du gör det kan många vanliga uppgifter börja misslyckas om de behöver allokera utrymme i tempdb. Om du till exempel anger antingen den fasta gränsen eller procentgränsen till 0 för default 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 arbetsbelastningsgruppens default användning. Det kan avbryta frågor med fel 1138 när det fortfarande finns outnyttjat utrymme i tempdb 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 maximala tempdb storleken. Om den maximala tempdb storleken till exempel är 100 GB GROUP_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 ledigt tempdb utrymme fortfarande är tillgängligt eftersom arbetsbelastningsgrupperna A och B sannolikt inte förbrukar mycket tempdb 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 mer tempdb utrymme till varje grupp om du vet att flera grupper sannolikt inte kommer att orsaka hög tempdb användning samtidigt.