Delen via


Tempdb-ruimteresourcebeheer

Van toepassing op: SQL Server 2025 (17.x) en latere versies

Wanneer u het beheer van ruimteresources inschakelt tempdb, verbetert u de betrouwbaarheid en voorkomt u storingen door te verhinderen dat ongecontroleerde query's of workloads een grote hoeveelheid ruimte in tempdb verbruiken.

Vanaf SQL Server 2025 (17.x) kunt u resource governor gebruiken om een limiet af te dwingen voor de totale hoeveelheid tempdb ruimte die door een workloadgroep wordt verbruikt. Een workloadgroep kan worden gekoppeld aan een toepassing, een gebruiker, een groep gebruikers, enzovoort. Wanneer een aanvraag (een query) de limiet probeert te overschrijden, wordt deze door resource governor afgebroken met een afzonderlijke fout die aangeeft dat de limiet van de workloadgroep is afgedwongen.

In feite kunt u de gedeelde tempdb ruimte partitioneren tussen verschillende workloads. U kunt bijvoorbeeld een hogere limiet instellen voor een workloadgroep die wordt gebruikt door een bedrijfskritieke toepassing en een lagere limiet instellen voor de default werkbelastinggroep die door alle andere workloads wordt gebruikt.

Zie Zelfstudie: Voorbeelden voor het configureren van tempdb-ruimteresourcebeheer voor stapsgewijze configuratievoorbeelden.

Aan de slag met resource governor

Resource Governor biedt een flexibel framework voor het instellen van verschillende tempdb ruimtelimieten voor verschillende toepassingen, gebruikers, gebruikersgroepen, enzovoort. U kunt ook limieten instellen op basis van aangepaste logica.

Als u nieuw bent met de resource governor in SQL Server, raadpleegt u resource governor om meer te leren over de concepten en mogelijkheden.

Zie Handleiding: Voorbeelden en best practices van Resource Governor-configuratie voor een stappenplan en de beste praktijken voor de configuratie van de Resource Governor.

Limieten instellen voor tempdb-ruimteverbruik

U kunt het ruimteverbruik door een workloadgroep op een van de volgende twee manieren beperken tempdb:

  • Stel een vaste limiet in met behulp van het GROUP_MAX_TEMPDB_DATA_MB argument.

    De vaste limiet is handig wanneer de gebruiksvereisten van de workload tempdb vooraf bekend zijn, of wanneer de grootte tempdb niet verandert.

  • Stel een procentlimiet in met behulp van het GROUP_MAX_TEMPDB_DATA_PERCENT argument.

    De percentagelimiet is handig wanneer u de maximale grootte in de loop van tempdb de tijd kunt wijzigen en u wilt dat de tempdb ruimte die beschikbaar is voor elke workloadgroep proportioneel wordt gewijzigd zonder resource governor opnieuw te configureren. Als u bijvoorbeeld een Azure-VM met SQL Server omhoog schaalt en de maximale tempdb grootte verhoogt, neemt ook de tempdb ruimte die beschikbaar is voor elke workloadgroep met een procentlimiet toe.

Zie GROUP_MAX_TEMPDB_DATA_MB of GROUP_MAX_TEMPDB_DATA_PERCENT voor meer informatie over de en argumenten.

Als zowel vaste als procentlimieten worden opgegeven voor dezelfde werkbelastinggroep, heeft de vaste limiet voorrang op de procentlimiet.

Op een bepaald SQL Server-exemplaar kunt u een combinatie van workloadgroepen hebben met vaste limieten, percentagelimieten of geen limieten voor tempdb ruimteverbruik.

Configuratie van percentagelimiet

De percentagelimieten zijn alleen van kracht wanneer de configuratie van het tempdb gegevensbestand voldoet aan de vereisten die in de volgende tabel worden samengevat:

Configuratie Beschrijving Tempdb maximale grootte (100%) Percentagelimiet van kracht
- GROUP_MAX_TEMPDB_DATA_MB is niet ingesteld
- Voor alle gegevensbestanden is MAXSIZE niet UNLIMITED
- Voor alle gegevensbestanden FILEGROWTH is het niet nul
tempdb gegevensbestanden kunnen automatisch groeien tot hun maximale grootte De som van MAXSIZE waarden voor alle gegevensbestanden Ja
- GROUP_MAX_TEMPDB_DATA_MB is niet ingesteld
- Voor alle gegevensbestanden, MAXSIZE is UNLIMITED
- Voor alle gegevensbestanden FILEGROWTH is nul
tempdb gegevensbestanden worden vooraf ingegroeid tot de beoogde grootten en kunnen niet verder groeien De som van SIZE waarden voor alle gegevensbestanden Ja
Alle andere configuraties Nee.

Met de volgende query ziet u de huidige tempdb configuratie van het gegevensbestand:

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';

Voor een bepaald bestand in de resultatenset:

  • Als de maxsize_mb kolom NULL is, dan is MAXSIZEUNLIMITED.
  • Wanneer een van beide filegrowth_mb of filegrowth_percent nul is, is dat FILEGROWTH nul.

Als u de GROUP_MAX_TEMPDB_DATA_PERCENT instelt en uitvoert, maar de configuratie van het gegevensbestand niet voldoet aan de vereisten, wordt de instructie voltooid en worden de procentlimieten opgeslagen, maar worden ze niet afgedwongen. In dit geval ontvangt u een waarschuwingsbericht 10989, ernst 10, GROUP_MAX_TEMPDB_DATA_PERCENT niet van kracht is omdat niet aan de tempdb-configuratievereisten wordt voldaan. Het bericht wordt ook vastgelegd in het foutenlogboek.

Als u de percentagelimieten effectief wilt maken, moet u gegevensbestanden opnieuw configureren tempdb om aan de vereisten te voldoen en opnieuw uit te voeren ALTER RESOURCE GOVERNOR RECONFIGURE . Zie SIZE voor meer informatie over het configureren van FILEGROWTH, MAXSIZE, en .

Opmerking

Voor een nieuw exemplaar van SQL Server is het gegevensbestand MAXSIZEUNLIMITED en is FILEGROWTH groter dan nul, wat betekent dat percentagelimieten niet effectief zijn. Als u percentagelimieten wilt gebruiken, moet u het volgende doen:

  • Laat gegevensbestanden groeien tempdb tot de beoogde grootten en stel FILEGROWTH in op nul.
  • Stel de MAXSIZE waarde van elk gegevensbestand in op een beperkte waarde.
    • Zorg ervoor dat voor elk tempdb gegevensbestandsvolume de som van MAXSIZE waarden voor bestanden op het volume kleiner is dan of gelijk is aan de beschikbare schijfruimte op het volume.

      Als een volume bijvoorbeeld 100 GB vrije ruimte heeft en twee tempdb gegevensbestanden heeft, maakt u het MAXSIZE van elk bestand 50 GB of minder.

Als een percentagelimiet van kracht is en u gegevensbestanden toevoegt, verwijdert of het formaat tempdb ervan wijzigt, moet u resource ALTER RESOURCE GOVERNOR RECONFIGURE governor bijwerken met de nieuwe maximale grootte ( tempdb 100%).

Hoe het werkt

In deze sectie wordt het beheer van ruimteresources uitgebreid beschreven tempdb .

  • Wanneer gegevenspagina's in tempdb worden toegewezen en ongedaan gemaakt, houdt Resource Governor de boekhouding bij van de tempdb ruimte verbruikt door elke workloadgroep.

    Als resource governor is ingeschakeld en een tempdb limiet voor ruimteverbruik is ingesteld voor een workloadgroep en een aanvraag (een query) die wordt uitgevoerd in de workloadgroep, probeert het totale tempdb ruimteverbruik door de groep boven de limiet te brengen, wordt de aanvraag afgebroken met fout 1138, ernst 17, kan er geen nieuwe pagina worden toegewezen voor database 'tempdb' omdat deze de limiet overschrijdt die is ingesteld voor workloadgroep 'workload-group-name'.

    Wanneer een aanvraag wordt afgebroken met fout 1138, wordt de waarde in de total_tempdb_data_limit_violation_count kolom van de sys.dm_resource_governor_workload_groups dynamische beheerweergave (DMV) met één verhoogd en wordt de tempdb_data_workload_group_limit_reached uitgebreide gebeurtenis geactiveerd.

  • Resource Governor houdt alle tempdb gebruik bij die kan worden toegeschreven aan een workloadgroep, waaronder tijdelijke tabellen, variabelen (inclusief tabelvariabelen), parameters met tabelwaarden, niet-temporale tabellen, cursors en tempdb gebruik tijdens queryverwerking, zoals spools, overlopen, werktabellen en werkbestanden.

    Het ruimteverbruik voor globale tijdelijke tabellen en niet-tijdgebonden tabellen wordt tempdb opgenomen in de workloadgroep die de eerste rij in de tabel invoegt, zelfs als sessies in andere werkbelastinggroepen rijen in dezelfde tabel toevoegen, wijzigen of verwijderen.

  • De geconfigureerde tempdb verbruikslimieten voor elke workloadgroep worden weergegeven in de sys.resource_governor_workload_groups catalogusweergave, in de group_max_tempdb_data_mb en group_max_tempdb_data_percent kolommen.

    Het huidige verbruik en het piekverbruik van tempdb geheugenruimte door een workloadgroep worden weergegeven in de sys.dm_resource_governor_workload_groups DMV, in respectievelijk de tempdb_data_space_kb en peak_tempdb_data_space_kb kolommen.

    Aanbeveling

    tempdb_data_space_kb en peak_tempdb_data_space_kb kolommen in sys.dm_resource_governor_workload_groups worden gehandhaafd, zelfs als er geen limieten voor tempdb ruimteverbruik zijn ingesteld.

    U kunt de classificatiefunctie en workloadgroepen maken zonder in eerste instantie limieten in te stellen. Bewaak tempdb het gebruik door elke groep in de loop van de tijd om representatieve gebruikspatronen vast te stellen en stel vervolgens limieten in zoals vereist.

  • Tempdb het gebruik door de versiearchieven, inclusief het permanente versiearchief (PVS) wanneer versneld databaseherstel (ADR) is ingeschakeld tempdb, wordt niet beheerd omdat rijversies kunnen worden gebruikt door aanvragen in meerdere workloadgroepen.

  • De ruimteconsumptie in tempdb is opgegeven als het aantal gebruikte gegevenspagina's van 8 kB. Zelfs als een pagina niet volledig is gevuld met gegevens, wordt 8 kB toegevoegd aan het tempdb verbruik door een workloadgroep.

  • Tempdb ruimtebeheer wordt gedurende de levensduur van een werkgroep onderhouden. Als een workloadgroep wordt verwijderd terwijl globale tijdelijke tabellen of niet-tijdelijke tabellen met de gegevens die aan deze workloadgroep zijn toegewezen zich in tempdb bevinden, wordt de ruimte die door deze tabellen wordt gebruikt niet meegeteld onder een andere workloadgroep.

  • Tempdb ruimteresourcebeheer bepaalt de ruimte in tempdb gegevensbestanden, maar niet de schijfruimte op de onderliggende volumes. Tenzij u gegevensbestanden vooraf naar de beoogde grootten vergroot tempdb , kan de ruimte op de volumes waar tempdb zich bevindt, worden gebruikt door andere bestanden. Als er geen resterende ruimte is om tempdb gegevensbestanden te laten groeien, tempdb is er mogelijk onvoldoende ruimte voordat een limiet voor de werkbelastinggroep voor tempdb het verbruik van ruimte wordt bereikt.

  • Ruimteresourcebeheer is tempdb van toepassing op gegevensbestanden, maar niet op het transactielogboekbestand. Schakel tempdb in om ervoor te zorgen dat het transactielogboek tempdb geen grote hoeveelheid ruimte verbruikt.

Verschillen met ruimtetracering op session-niveau

De sys.dm_db_session_space_usage DMV biedt tempdb ruimtetoewijzings- en deallocatiestatistieken voor elke sessie. Zelfs als er slechts één sessie in een workloadgroep is, komen de door deze DMV verstrekte gebruiksstatistieken voor ruimte mogelijk niet exact overeen met de statistieken in de sys.dm_resource_governor_workload_groups weergave, om de volgende redenen:

  • In tegenstelling tot sys.dm_resource_governor_workload_groups, : sys.dm_db_session_space_usage
    • Geeft geen ruimtegebruik weer tempdb door de taken die momenteel worden uitgevoerd. sys.dm_db_session_space_usage Statistieken worden bijgewerkt wanneer een taak is voltooid. Statistieken in sys.dm_resource_governor_workload_groups worden continu bijgewerkt.
    • Houdt geen pagina's bij van de Index Allocation Map (IAM). Voor meer informatie, zie gids voor de architectuur van pagina's en gebieden.
  • Nadat rijen zijn verwijderd, of wanneer een tabel, index of partitie wordt verwijderd of afgekapt, kan de toewijzing van gegevenspagina's ongedaan worden gemaakt door een asynchroon achtergrondproces. Deze pagina-deallocatie kan optreden met een vertraging. sys.dm_resource_governor_workload_groups weerspiegelt deze pagina-deallocaties wanneer ze optreden, zelfs als de sessie die deze deallocaties heeft veroorzaakt, is gesloten en niet meer aanwezig is in sys.dm_db_session_space_usage.

Aanbevolen procedures voor tempdb-ruimteresourcebeheer

Voordat u ruimteresourcebeheer configureert tempdb , moet u rekening houden met de volgende aanbevolen procedures:

  • Bekijk de algemene beste werkwijzen voor resource governor.

  • Vermijd voor de meeste scenario's het instellen van de tempdb limiet voor ruimteverbruik op een kleine waarde of nul, met name voor de default workloadgroep. Als u dit doet, kunnen veel veelvoorkomende taken mislukken als ze ruimte moeten toewijzen in tempdb. Als u bijvoorbeeld de vaste of procentlimiet instelt op 0 voor de default werkbelastinggroep, kunt u Objectverkenner mogelijk niet openen in SQL Server Management Studio (SSMS).

  • Tenzij u aangepaste workloadgroepen en een classificatiefunctie hebt gemaakt die workloads in hun toegewezen groepen plaatst, vermijd dan om het gebruik door de tempdb workloadgroep te beperkendefault. Dit kan query's beëindigen met fout 1138 wanneer tempdb nog steeds ongebruikte ruimte heeft die niet kan worden gebruikt door een gebruikersworkload.

  • Het is toegestaan dat de som van GROUP_MAX_TEMPDB_DATA_MB waarden voor alle workloadgroepen de maximale tempdb grootte overschrijdt. Als de maximale tempdb grootte bijvoorbeeld 100 GB is, kunnen de GROUP_MAX_TEMPDB_DATA_MB limieten voor workloadgroep A en workloadgroep B elk 80 GB zijn.

    Deze aanpak voorkomt nog steeds dat elke workloadgroep alle ruimte in tempdb beslag neemt door 20 GB voor andere workloadgroepen te verlaten. Tegelijkertijd vermijdt u onnodige afgebroken query's wanneer er nog steeds vrije tempdb ruimte beschikbaar is, omdat de werkbelastinggroepen A en B waarschijnlijk niet tegelijkertijd veel tempdb ruimte zullen verbruiken.

    Op dezelfde manier kan de som van GROUP_MAX_TEMPDB_DATA_PERCENT waarden voor alle workloadgroepen groter zijn dan 100 procent. U kunt meer tempdb ruimte toewijzen aan elke groep als u weet dat meerdere groepen waarschijnlijk niet tegelijkertijd een hoog tempdb gebruik veroorzaken.