Tempdb-helyforrás-szabályozás

A következőkre vonatkozik: SQL Server 2025 (17.x) és újabb verziók

Ha engedélyezi tempdb a helyerőforrás-szabályozást, javíthatja a megbízhatóságot, és elkerülheti a kimaradásokat azáltal, hogy megakadályozza, hogy az elszabadult lekérdezések vagy számítási feladatok nagy mennyiségű helyet foglalhassanak el.tempdb

A 2025-ös (17.x) SQL Server kezdve az erőforrás-vezérlővel korlátozhatja a számítási feladatcsoport által felhasznált teljes területettempdb. Amikor egy kérés (lekérdezés) megkísérli túllépni a korlátot, az erőforrás-vezérlő egy külön hibával megszakítja azt, amely azt jelzi, hogy a számítási feladatcsoport korlátja kényszerítve van.

A megosztott tempdb területet gyakorlatilag particionálásra használhatja a különböző számítási feladatok között. Beállíthatja például egy kritikus fontosságú alkalmazás által használt számítási feladatcsoportra vonatkozó magasabb korlátot, és alacsonyabb korlátot állíthat be az default összes többi számítási feladat által használt számítási feladatcsoportra vonatkozóan.

Részletes konfigurációs példákért lásd az oktatóanyagot: Példák a tempdb térerőforrás-szabályozás konfigurálására.

Ismerkedés az erőforrás-kormányzóval

Az Erőforrás-vezérlő rugalmas keretrendszert biztosít a különböző alkalmazások, felhasználók, felhasználói csoportok stb. különböző tempdb helykorlátainak beállításához. Egyéni logika alapján is beállíthat korlátokat.

Ha még nem ismerkedik az erőforrás-kormányzóval a SQL Server, az erőforrás-kormányzóban megismerheti annak fogalmait és képességeit.

Az erőforrás-kormányzó konfigurációs útmutatóját és ajánlott eljárásait az oktatóanyagban találja: Az erőforrás-vezérlő konfigurációs példái és ajánlott eljárásai.

A tempdb-helyhasználat korlátainak beállítása

Egy számítási feladatcsoport a térhasználatot kétféleképpen korlátozhatja tempdb :

  • Állítsa be a rögzített korlátot az GROUP_MAX_TEMPDB_DATA_MB argumentum használatával.

    A rögzített korlátot akkor használja, ha előre ismeri a számítási feladatok tempdb használati követelményeit, vagy ha a tempdb méret nem változik.

  • Állítsa be a százalékos korlátot az GROUP_MAX_TEMPDB_DATA_PERCENT argumentum használatával.

    Használja a százalékos korlátot, ha az idő múlásával módosíthatja a maximális méretet, és azt szeretné, hogy az tempdb egyes számítási feladatok csoportjai számára rendelkezésre álló terület arányosan változzon a számítási feladatcsoport konfigurációjának tempdb módosítása nélkül. Ha például felskáláz egy SQL Servert futtató Azure-beli virtuális gépet, és növeli a maximális tempdb méretet, akkor az tempdb egyes számítási feladatokhoz rendelkezésre álló, százalékos korláttal rendelkező terület is nő.

A(z) GROUP_MAX_TEMPDB_DATA_MB és GROUP_MAX_TEMPDB_DATA_PERCENT argumentummal kapcsolatos további információkért lásd: CREATE WORKLOAD GROUP vagy ALTER WORKLOAD GROUP.

Ha ugyanahhoz a számítási feladatcsoporthoz rögzített és százalékos korlátot is megad, a rögzített korlát elsőbbséget élvez a százalékos korlátkal szemben.

Egy adott SQL Server-példányon több számítási feladatcsoportot is használhat rögzített korlátozásokkal, százalékkorlátokkal vagy a helyhasználat korlátozása tempdb nélkül. Az érvényes korlátok megtekintéséhez tekintse meg az érvényes tempdb-helykorlátok megtekintése számítási feladatcsoportonkénti példát.

Százalékos korlát beállítása

Az utasítás futtatásakor a ALTER RESOURCE GOVERNOR RECONFIGURE százalékkorlátok az alábbi táblázat szerint lépnek érvénybe:

Konfiguráció Leírás Tempdb maximális mérete (100%) Érvényben lévő százalékos korlát
- GROUP_MAX_TEMPDB_DATA_MB nincs beállítva
- Az összes adatfájl esetében MAXSIZE nem UNLIMITED
- Minden adatfájl esetében a(z) FILEGROWTH nem nulla
tempdb az adatfájlok a maximális méretükig automatikusan megnőhetnek Az összes adatfájl értékeinek összege MAXSIZE Igen
- GROUP_MAX_TEMPDB_DATA_MB nincs beállítva
- Az összes adatfájl MAXSIZE esetében a UNLIMITED
- Az összes adatfájl FILEGROWTH értéke nulla.
tempdb az adatfájlok előre be vannak telepítve a kívánt méretükbe, és nem növekedhetnek tovább Az összes adatfájl értékeinek összege SIZE Igen
Minden más konfiguráció Nem

A tempdb konfiguráció megtekintéséhez tekintse meg a Tempdb-adatfájl konfigurációs példáját.

Százalékkorlátok használata esetén vegye figyelembe a következőket:

  • Ha beállítja GROUP_MAX_TEMPDB_DATA_PERCENT és végrehajtja a ALTER RESOURCE GOVERNOR RECONFIGURE utasítást, de az adatfájl konfigurációja nem felel meg a követelményeknek, az utasítás sikeresen befejeződik, és a százalékos korlátokat a rendszer tárolja, de nem kényszeríti őket. Ebben az esetben az 10989-10 súlyosságú figyelmeztető üzenet jelenik meg, amelyet a hibanapló is naplóz:

    GROUP_MAX_TEMPDB_DATA_PERCENT is not in effect because tempdb
    configuration requirements aren't met.
    
  • A százalékkorlátok hatékonyságának érdekében konfigurálja tempdb újra az adatfájlokat a követelményeknek való megfeleléshez, majd hajtsa végre ALTER RESOURCE GOVERNOR RECONFIGURE újra. További információ a fájl- és SIZEMAXSIZE konfigurálásárólALTER DATABASE.

  • Ha a százalékos korlát érvényben van, és adatfájlokat ad hozzá, távolít el vagy méretez tempdb át, akkor végre kell hajtania ALTER RESOURCE GOVERNOR RECONFIGURE az erőforrás-vezérlő frissítését tempdb az új maximális mérettel (100%).

Megjegyzés:

Új SQL Server-példány esetén a(z) MAXSIZE adatfájl értéke UNLIMITED, és a(z) FILEGROWTH értéke nagyobb nullánál, ami azt jelenti, hogy a százalékos korlátok nem érvényesülnek. A százalékkorlátok használatához a következőkre van szükség:

  • tempdb Állítsa be az adatfájlokat a kívánt méretre, és állítsa FILEGROWTH nulla értékre.
  • Állítsa az MAXSIZE egyes adatfájlok értékét korlátozott értékre.
  • Minden adatfájl-kötet tempdb esetében győződjön meg arról, hogy a köteten lévő fájlok értékeinek összege MAXSIZE kisebb vagy egyenlő a köteten rendelkezésre álló lemezterületnél. Ha például egy kötet 100 GB szabad területtel rendelkezik, és két tempdb adatfájllal rendelkezik, az MAXSIZE egyes fájlok mérete 50 GB vagy kevesebb.

Hogyan működik?

Ez a szakasz részletesen ismerteti tempdb a térerőforrás-szabályozást.

  • Mivel az adatoldalak tempdb ki vannak foglalva és felszabadítva vannak, az erőforrás-kormányzó megtartja az tempdb egyes számítási feladatok csoportjai által felhasznált terület könyvelését.

    Ha az erőforrás-vezérlő engedélyezve van, és tempdb egy számítási feladatcsoport számára helyhasználati korlát van beállítva, és a számítási feladatcsoportban futó kérés (lekérdezés) megpróbálja a csoport által a korlát fölé állítani a teljes tempdb területfelhasználást, a kérést 1138-ás, 17-s súlyosságú hiba szakítja meg:

    Could not allocate a new page for database 'tempdb' because that
    would exceed the limit set for workload group 'workload-group-name'".
    

    Ha egy kérést 1138-os hibával szakít meg, a total_tempdb_data_limit_violation_count dinamikus felügyeleti nézet (DMV) oszlopában lévő érték eggyel növekszik, és a tempdb_data_workload_group_limit_reached kiterjesztett esemény aktiválódik.

  • Az erőforrás-vezérlő nyomon követi a számítási feladatcsoporthoz rendelhető összes tempdb használatot, beleértve az ideiglenes táblákat, a változókat (beleértve a táblaváltozókat), a táblaértékkel rendelkező paramétereket, a nem ideiglenes táblákat, a kurzorokat és tempdb a lekérdezésfeldolgozás során történő használatot, például az adatsorokat, a kiömléseket, a munkatáblákat és a munkafájlokat.

    A globális ideiglenes táblák és a nem ideiglenes táblák tempdb helyfelhasználását az első sort a táblázatba beszúró számítási feladatcsoport veszi figyelembe, még akkor is, ha a többi számítási feladatcsoport munkamenetei ugyanahhoz a táblához adnak hozzá, módosítanak vagy távolítanak el sorokat.

  • Az egyes számítási feladatcsoportokra vonatkozó konfigurált tempdb használati korlátok a sys.resource_governor_workload_groups katalógusnézetben, a group_max_tempdb_data_mb és group_max_tempdb_data_percent oszlopokban jelennek meg.

    A számítási feladatcsoport aktuális kihasználtsága és maximális kihasználtsága tempdb a sys.dm_resource_governor_workload_groups DMV-ben, illetve az tempdb_data_space_kbpeak_tempdb_data_space_kb oszlopokban jelenik meg.

    Jótanács

    tempdb_data_space_kb és peak_tempdb_data_space_kb a sys.dm_resource_governor_workload_groups oszlopai akkor is megmaradnak, ha nincs korlátozva a tempdb térhasználat.

    Az osztályozófüggvényeket és a számítási feladatcsoportokat kezdetben korlátok megadása nélkül is létrehozhatja. Kövesse nyomon minden csoport tempdb használatát az idők során a reprezentatív használati minták meghatározásához, majd szükség szerint állítson be korlátokat.

  • tempdb A verziótárolók általi használat, beleértve az állandó verziótárat (PVS) is, ha a gyorsított adatbázis-helyreállítás (ADR) engedélyezve tempdbvan, nem vonatkozik rá, mert a sorverziókat több számítási feladatcsoport kérései használhatják.

  • A tempdb helyhasználat a felhasznált 8 KB-os adatlapok számával van elszámolva. Még akkor is 8 KB-t ad hozzá a tempdb felhasználáshoz egy munkaterhelési csoport, ha egy lap nincs teljesen kitöltve adatokkal.

  • tempdb a rendszer a számítási feladatcsoport teljes élettartama alatt fenntartja a térbeli könyvelést. Ha egy számítási feladatcsoport fel lesz szüntetve, miközben a globális ideiglenes táblák vagy az ehhez a számítási feladatcsoporthoz kapcsolódó nem ideiglenes táblák maradnak tempdb, a táblák által használt terület más számítási feladatcsoporthoz nem kerül elszámolásra.

  • tempdb A térerőforrás-szabályozás az adatfájlokban lévő tempdb helyet vezérli, a mögöttes köteteken lévő lemezterületet azonban nem. Ha nem növeli meg előre a(z) tempdb adatfájlokat a tervezett méretükre, akkor azokon a köteteken, ahol a(z) tempdb található, a tárhelyet más fájlok foglalhatják el. Ha nincs szabad hely az adatfájlok növekedéséhez tempdb , akkor tempdb előfordulhat, hogy elfogy a szabad terület, mielőtt elérné a számítási feladatcsoport térhasználati tempdb korlátját.

  • A térerőforrás-szabályozás az tempdb adatfájlokra vonatkozik, a tranzakciónapló-fájlra nem. Annak érdekében, hogy a tranzakciós bejelentkezés tempdb ne használjon fel nagy mennyiségű helyet, engedélyezze az ADR-t.tempdb

Különbségek a munkamenetszintű térkövetésben

A sys.dm_db_session_space_usage DMV minden munkamenethez helyfoglalási és felszabadítási statisztikákat biztosít tempdb . Még ha csak egy munkamenet is van egy számítási feladatcsoportban, előfordulhat, hogy a DMV helyhasználati statisztikái nem felelnek meg pontosan az sys.dm_resource_governor_workload_groups nézet statisztikáinak, az alábbi okok miatt:

  • Ellentétben a következővelsys.dm_resource_governor_workload_groupssys.dm_db_session_space_usage:
    • Nem tükrözi tempdb a jelenleg futó tevékenységek által használt területet. A sys.dm_db_session_space_usage statisztikái frissülnek, amikor egy feladat befejeződik. A statisztikák sys.dm_resource_governor_workload_groups folyamatosan frissülnek.
    • Az indexfoglalási térkép (IAM) lapjait nem követi nyomon. További információkért tekintse meg az Oldal- és kiterjedésarchitektúra útmutatót.
  • A sorok törlése, illetve egy tábla, index vagy partíció elvetése vagy csonkosítása után az adatbázismotor felszabadítja az adatoldalakat. Előfordulhat, hogy a felszabadítás szinkron, vagy aszinkron háttérfolyamattal történik. sys.dm_resource_governor_workload_groups ezek az oldalelhelyezések akkor is megjelennek, ha a felszabadítást okozó munkamenet bezárult, és már nem szerepel a fájlban sys.dm_db_session_space_usage.

Ajánlott eljárások a tempdb space erőforrás-szabályozásához

A térerőforrás-szabályozás tempdb konfigurálása előtt vegye figyelembe az alábbi ajánlott eljárásokat:

  • Tekintse át az erőforráskezelő általános ajánlott eljárásait.

  • A legtöbb forgatókönyv esetében kerülje a tempdb helyhasználati korlát kis értékre vagy nullára történő beállítását, különösen a default számítási feladatcsoport esetében. Ha ezt a korlátot kis értékre vagy nullára állítja be, sok gyakori feladat meghiúsulhat, ha helyet kell lefoglalniuk a rendszerben tempdb. Ha például a rögzített vagy a százalékos korlátot 0-ra állítja be a számítási feladatcsoporthoz, előfordulhat, hogy nem tudja megnyitni az Object Explorert az default SQL Server Management Studióban (SSMS).

  • Hacsak nem hoz létre egyéni számítási feladatcsoportokat és egy osztályozófüggvényt, amely a számítási feladatokat a dedikált csoportokba helyezi, kerülje a tempdb számítási feladatcsoport használatának korlátozásátdefault. Ha korlátozza a default munkaterhelési csoport tempdb tárterület-használatát, a lekérdezések 1138-as hibát adhatnak vissza. Ez a hiba akkor fordul elő, ha tempdb még mindig nincs használatban olyan terület, amelyet egyetlen felhasználói számítási feladat sem tud felhasználni.

  • Az összes számítási feladatcsoport értékeinek összege GROUP_MAX_TEMPDB_DATA_MB meghaladhatja a maximális tempdb méretet. Ha például a maximális tempdb méret 100 GB, az GROUP_MAX_TEMPDB_DATA_MB és a B számítási feladatcsoport korlátai egyenként 80 GB lehetnek.

    Ez a módszer továbbra is megakadályozza, hogy minden számítási feladatcsoport teljes területet tempdb használ fel, ha 20 GB-ot hagy a többi számítási feladatcsoport számára. Ugyanakkor elkerülheti a szükségtelen lekérdezési megszakításokat, ha a szabad tempdb terület továbbra is rendelkezésre áll, mert az A és B számítási feladatcsoportok valószínűleg nem fognak nagy mennyiségű tempdb helyet felhasználni egyszerre.

    Hasonlóképpen, az összes számítási feladatcsoport értékeinek összege GROUP_MAX_TEMPDB_DATA_PERCENT meghaladhatja a 100 százalékot. Ha tudja, hogy több csoport nem okoz egyszerre magas tempdb kihasználtságot, több tempdb helyet is lefoglalhat az egyes csoportok számára.

Examples

Tempdb-adatfájl konfigurációjának megtekintése

Az alábbi lekérdezés az aktuális tempdb adatfájl-konfigurációt mutatja be:

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

Egy adott fájl esetében az eredményhalmazban:

  • Ha az maxsize_mb oszlop NULL, akkor MAXSIZEUNLIMITED.
  • Ha vagy filegrowth_mbfilegrowth_percent nulla, akkor FILEGROWTH nulla.

Tényleges tempdb-helykorlátok megtekintése számítási feladatcsoportonként

Az alábbi lekérdezés az egyes számítási feladatokhoz tartozó tényleges tempdb helyhasználati korlátot mutatja be. A korlátot a rendszer megabájtban adja vissza rögzített vagyszázalékos korlátkonfiguráció esetén.

Ha az group_effective_limit_mb oszlop az NULL, az alábbiak egyikét jelenti:

  • Sem rögzített, sem százalékos korlát nincs konfigurálva.
  • A százalékos korlát konfigurációjának használatára vonatkozó követelmények nem teljesülnek.
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;

Következő lépés