Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 de resource governor gebruiken om een limiet af te dwingen voor de totale hoeveelheid ruimte die tempdb door een workloadgroep wordt verbruikt. Wanneer een verzoek (een query) de limiet probeert te overschrijden, breekt Resource Governor dit af met een specifieke foutmelding die aangeeft dat de limiet van de werklastgroep wordt gehandhaafd.
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.
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 resource governor in SQL Server nieuw voor u is, raadpleegt u resource governor voor meer informatie over de concepten en mogelijkheden ervan.
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_MBargument.Gebruik de vaste limiet wanneer u de vereisten voor workloadgebruik
tempdbvan tevoren kent of wanneer detempdbgrootte niet verandert.Stel een percentagelimiet in met behulp van het
GROUP_MAX_TEMPDB_DATA_PERCENTargument.Gebruik de percentagelimiet wanneer u de maximale grootte in de loop van de tijd kunt wijzigen en u wilt dat de
tempdbruimte die beschikbaar is voor elke workloadgroep proportioneel wordt gewijzigd zonder de configuratie vantempdbde werkbelastinggroep te wijzigen. Als u bijvoorbeeld een Azure-VM met SQL Server omhoog schaalt en de maximaletempdbgrootte verhoogt, neemt ook detempdbruimte 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 argumenten CREATE WORKLOAD GROUP en ALTER WORKLOAD GROUP.
Als u zowel vaste als procentlimieten voor dezelfde werkbelastinggroep opgeeft, 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. Als u effectieve limieten wilt weergeven, raadpleegt u het voorbeeld van effectieve tempdb-ruimtelimieten per workloadgroep weergeven.
Configuratie van percentagelimiet
Wanneer u de ALTER RESOURCE GOVERNOR RECONFIGURE instructie uitvoert, worden procentlimieten van kracht volgens de volgende tabel:
| Configuratie | Beschrijving | Tempdb maximale grootte (100%) | Percentagelimiet van kracht |
|---|---|---|---|
-
GROUP_MAX_TEMPDB_DATA_MB is niet ingesteld- Voor alle gegevensbestanden MAXSIZE is dat niet zo 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. |
Zie het voorbeeld van de configuratie van het tempdb om uw configuratie weer te geven.
Houd rekening met het volgende wanneer u percentagelimieten gebruikt:
Als u de
GROUP_MAX_TEMPDB_DATA_PERCENTinstelt ALTER RESOURCE GOVERNOR 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, dat ook is vastgelegd in het foutenlogboek:GROUP_MAX_TEMPDB_DATA_PERCENT is not in effect because tempdb configuration requirements aren't met.Als u de percentagelimieten effectief wilt maken, moet u gegevensbestanden opnieuw configureren
tempdbom aan de vereisten te voldoen en opnieuw uit te voerenALTER RESOURCE GOVERNOR RECONFIGURE. ZieFILEGROWTHvoor meer informatie over het configureren vanMAXSIZE, ALTER DATABASE en .Als een percentagelimiet van kracht is en u gegevensbestanden toevoegt, verwijdert of het formaat
tempdbervan wijzigt, moet u resourceALTER RESOURCE GOVERNOR RECONFIGUREgovernor bijwerken met de nieuwe maximale grootte (tempdb100%).
Opmerking
Voor een nieuwe SQL Server-instantie is gegevensbestand MAXSIZEUNLIMITED en is FILEGROWTH groter dan nul, wat betekent dat procentuele limieten geen effect hebben. Als u percentagelimieten wilt gebruiken, moet u het volgende doen:
- Laat gegevensbestanden groeien
tempdbtot de beoogde grootten en stelFILEGROWTHin op nul. - Stel de
MAXSIZEwaarde van elk gegevensbestand in op een beperkte waarde. - Zorg ervoor dat voor elk
tempdbgegevensbestandsvolume de som vanMAXSIZEwaarden 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 tweetempdbgegevensbestanden heeft, maakt u hetMAXSIZEvan elk bestand 50 GB of minder.
Hoe het werkt
In deze sectie wordt het beheer van ruimteresources uitgebreid beschreven tempdb .
Wanneer gegevenspagina's in
tempdbworden toegewezen en ongedaan gemaakt, houdt Resource Governor de boekhouding bij van detempdbruimte verbruikt door elke workloadgroep.Als resource governor is ingeschakeld en een
tempdblimiet voor ruimteverbruik is ingesteld voor een workloadgroep en een aanvraag (een query) die wordt uitgevoerd in de workloadgroep probeert het totaletempdbruimteverbruik door de groep boven de limiet te brengen, wordt de aanvraag afgebroken met fout 1138, ernst 17:Could not allocate a new page for database 'tempdb' because that would exceed the limit set for workload group 'workload-group-name'".Wanneer een aanvraag wordt afgebroken met fout 1138, wordt de waarde in de
total_tempdb_data_limit_violation_countkolom van de sys.dm_resource_governor_workload_groups dynamische beheerweergave (DMV) met één verhoogd en wordt detempdb_data_workload_group_limit_reacheduitgebreide gebeurtenis geactiveerd.Resource Governor houdt alle
tempdbgebruik bij die kan worden toegeschreven aan een workloadgroep, waaronder tijdelijke tabellen, variabelen (inclusief tabelvariabelen), parameters met tabelwaarden, niet-temporale tabellen, cursors entempdbgebruik tijdens queryverwerking, zoals spools, overlopen, werktabellen en werkbestanden.Het ruimteverbruik voor globale tijdelijke tabellen en niet-tijdgebonden tabellen wordt
tempdbopgenomen 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
tempdbverbruikslimieten voor elke workloadgroep worden weergegeven in de sys.resource_governor_workload_groups catalogusweergave, in degroup_max_tempdb_data_mbengroup_max_tempdb_data_percentkolommen.Het huidige verbruik en het piekverbruik van
tempdbgeheugenruimte door een workloadgroep worden weergegeven in de sys.dm_resource_governor_workload_groups DMV, in respectievelijk detempdb_data_space_kbenpeak_tempdb_data_space_kbkolommen.Aanbeveling
tempdb_data_space_kbenpeak_tempdb_data_space_kbkolommen in sys.dm_resource_governor_workload_groups worden gehandhaafd, zelfs als er geen limieten voortempdbruimteverbruik zijn ingesteld.U kunt de classificatiefunctie en workloadgroepen maken zonder in eerste instantie limieten in te stellen. Bewaak
tempdbhet gebruik door elke groep in de loop van de tijd om representatieve gebruikspatronen vast te stellen en stel vervolgens limieten in zoals vereist.tempdbhet gebruik door de versiearchieven, inclusief het permanente versiearchief (PVS) wanneer versneld databaseherstel (ADR) is ingeschakeldtempdb, wordt niet beheerd omdat rijversies kunnen worden gebruikt door aanvragen in meerdere workloadgroepen.De ruimteconsumptie in
tempdbis 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 hettempdbverbruik door een workloadgroep.tempdbruimtebeheer 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 intempdbbevinden, wordt de ruimte die door deze tabellen wordt gebruikt niet meegeteld onder een andere workloadgroep.tempdbruimteresourcebeheer bepaalt de ruimte intempdbgegevensbestanden, maar niet de schijfruimte op de onderliggende volumes. Tenzij u gegevensbestanden vooraf vergroottempdbnaar de gewenste grootte, kan de ruimte op de volumes waartempdbzich bevindt, worden gebruikt door andere bestanden. Als er geen resterende ruimte is omtempdbgegevensbestanden te laten groeien,tempdbis er mogelijk onvoldoende ruimte voordat een limiet voor de werkbelastinggroep voortempdbhet verbruik van ruimte wordt bereikt.Ruimteresourcebeheer is
tempdbvan toepassing op gegevensbestanden, maar niet op het transactielogboekbestand. Schakeltempdbin om ervoor te zorgen dat het transactielogboektempdbgeen 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 statistieken van ruimtegebruik van deze DMV mogelijk niet exact overeen met de statistieken uit 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
tempdbdoor de taken die momenteel worden uitgevoerd.sys.dm_db_session_space_usageStatistieken worden bijgewerkt wanneer een taak is voltooid. Statistieken insys.dm_resource_governor_workload_groupsworden continu bijgewerkt. - Houdt geen pagina's bij van de Index Allocation Map (IAM). Zie de handleiding voor pagina- en gebiedsarchitectuur voor meer informatie.
- Geeft geen ruimtegebruik weer
- Nadat rijen zijn verwijderd, of wanneer een tabel, index of partitie wordt verwijderd of leeggemaakt, maakt de database-engine de gegevenspagina's vrij. De deallocatie kan synchroon zijn of worden uitgevoerd door een asynchroon achtergrondproces.
sys.dm_resource_governor_workload_groupsweerspiegelt deze pagina-deallocaties wanneer ze optreden, zelfs als de sessie die deze deallocaties heeft veroorzaakt, is gesloten en niet meer aanwezig is insys.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
tempdblimiet voor ruimteverbruik op een kleine waarde of nul, met name voor dedefaultworkloadgroep. Als u deze limiet instelt op een kleine waarde of nul, kunnen veel algemene taken mislukken als ze ruimtetempdbin moeten toewijzen. Als u bijvoorbeeld de vaste of procentlimiet instelt op 0 voor dedefaultwerkbelastinggroep, kunt u Objectverkenner mogelijk niet openen in SQL Server Management Studio (SSMS).Tenzij u aangepaste workloadgroepen en een classificatiefunctie maakt die workloads in hun eigen groepen plaatst, moet u het beperken van het gebruik van de
tempdb-workloadgroep doordefaultvermijden. Als u hettempdbruimteverbruik door dedefaultworkloadgroep beperkt, kunnen query's fout 1138 retourneren. Deze fout treedt op wanneertempdbnog steeds ongebruikte ruimte heeft die door geen enkele gebruikersworkload kan worden benut.De som van
GROUP_MAX_TEMPDB_DATA_MBwaarden voor alle workloadgroepen kan de maximaletempdbgrootte overschrijden. Als de maximaletempdbgrootte bijvoorbeeld 100 GB is, kunnen deGROUP_MAX_TEMPDB_DATA_MBlimieten voor workloadgroep A en workloadgroep B elk 80 GB zijn.Deze aanpak voorkomt nog steeds dat elke workloadgroep alle ruimte in
tempdbbeslag neemt door 20 GB voor andere workloadgroepen te verlaten. Tegelijkertijd vermijdt u onnodige afgebroken query's wanneer er nog steeds vrijetempdbruimte beschikbaar is, omdat de werkbelastinggroepen A en B waarschijnlijk niet tegelijkertijd veeltempdbruimte zullen verbruiken.Op dezelfde manier kan de som van
GROUP_MAX_TEMPDB_DATA_PERCENTwaarden voor alle workloadgroepen groter zijn dan 100 procent. U kunt meertempdbruimte toewijzen aan elke groep als u weet dat meerdere groepen waarschijnlijk niet tegelijkertijd een hoogtempdbgebruik veroorzaken.
Examples
Configuratie van tempdb-gegevensbestand weergeven
De volgende query toont 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_mbkolomNULLis, dan isMAXSIZEUNLIMITED. - Wanneer een van beide
filegrowth_mboffilegrowth_percentnul is, is datFILEGROWTHnul.
Effectieve tempdb-ruimtelimieten per workloadgroep weergeven
De volgende query toont de effectieve tempdb limiet voor ruimteverbruik voor elke workloadgroep. De limiet wordt geretourneerd in megabytes voor de configuratie van een vaste limiet of percentagelimiet .
Als de group_effective_limit_mb kolom is NULL, betekent dit een van de volgende:
- Er wordt geen vaste limiet of percentagelimiet geconfigureerd.
- Er wordt niet voldaan aan de vereisten voor het gebruik van de configuratie van de procentlimiet.
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;
Volgende stap
Verwante inhoud
- Resourcebeheerder
- Zelfstudie: Voorbeelden van de configuratie van Resource Governor en aanbevolen procedures
- 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 (Transact-SQL)
- sys.dm_resource_governor_workload_groups (Transact-SQL)