Sdílet prostřednictvím


Zásady správného řízení prostředků prostoru tempdb

Platí pro: SQL Server 2025 (17.x) a novější verze

Když povolíte správu prostředků prostoru pomocí tempdb, zlepšíte spolehlivost a vyhnete se výpadkům tím, že zabráníte nežádoucím dotazům nebo úlohám, aby spotřebovávaly velké množství místa v rámci tempdb.

Počínaje SQL Serverem 2025 (17.x) můžete pomocí správce prostředků vynutit omezení celkového množství tempdb místa spotřebovaného skupinou úloh. Skupinu úloh lze přidružit k aplikaci, uživateli, skupině uživatelů atd. Když se požadavek (dotaz) pokusí překročit limit, správce prostředků ho přeruší s odlišnou chybou, která značí, že se vynutil limit skupiny úloh.

V podstatě můžete sdílený prostor tempdb rozdělit mezi různé úlohy. Můžete například nastavit vyšší limit pro skupinu úloh používanou kritickou aplikací a nastavit nižší limit pro default skupinu úloh používanou všemi ostatními úlohami.

Podrobné příklady konfigurace najdete v příručce: Příklady konfigurace správy prostředků pro prostor tempdb.

Začínáme s správcem prostředků

Správce prostředků poskytuje flexibilní architekturu pro nastavení různých tempdb limitů prostoru pro různé aplikace, uživatele, skupiny uživatelů atd. Omezení můžete nastavit také na základě vlastní logiky.

Pokud s správcem prostředků v SQL Serveru začínáte, přečtěte si správce prostředků a seznamte se s jeho koncepty a možnostmi.

Návod a osvědčené postupy pro konfiguraci správce prostředků najdete v kurzu: Příklady konfigurace správce prostředků a osvědčené postupy.

Nastavení limitů pro spotřebu místa v databázi tempdb

Spotřebu místa můžete omezit tempdb skupinou úloh jedním ze dvou způsobů:

  • Nastavte pevný limit pomocí argumentu GROUP_MAX_TEMPDB_DATA_MB .

    Pevný limit je užitečný v případě, že požadavky na využití úloh tempdb jsou známé předem nebo když tempdb se velikost nezmění.

  • Nastavte procentuální limit pomocí argumentu GROUP_MAX_TEMPDB_DATA_PERCENT .

    Limit v procentech je užitečný, když můžete v průběhu času změnit maximální velikost tempdb a chcete tempdb, aby se prostor dostupný pro každou skupinu úloh přiměřeně změnil bez rekonfigurace správce prostředků. Pokud například vertikálně navýšíte kapacitu virtuálního počítače Azure s SQL Serverem a zvýšíte maximální tempdb velikost, zvýší se tempdb také prostor dostupný pro každou skupinu úloh s procentuálním limitem.

Další informace o argumentech GROUP_MAX_TEMPDB_DATA_MB a GROUP_MAX_TEMPDB_DATA_PERCENT naleznete v kapitolách CREATE WORKLOAD GROUP nebo ALTER WORKLOAD GROUP.

Pokud jsou pro stejnou skupinu úloh zadány pevné i procentuální limity, má pevný limit přednost před limitem procenta.

V dané instanci SQL Serveru můžete mít kombinaci skupin úloh s pevnými limity, procentními limity nebo bez omezení tempdb užití místa.

Nastavení procentuálního limitu

Omezení procent platí jenom v případech, kdy konfigurace datového tempdb souboru splňuje požadavky shrnuté v následující tabulce:

Konfigurace Popis Maximální velikost databáze Tempdb (100%) Procentuální limit v platnosti
- GROUP_MAX_TEMPDB_DATA_MB není nastavená
- Pro všechny datové soubory MAXSIZE neplatí UNLIMITED
- Pro všechny datové soubory není FILEGROWTH nulové.
tempdb datové soubory se můžou automaticky zvětšovat až do maximální velikosti. Součet MAXSIZE hodnot pro všechny datové soubory Ano
- GROUP_MAX_TEMPDB_DATA_MB není nastavená
- Pro všechny datové soubory je MAXSIZEUNLIMITED
- Pro všechny datové soubory FILEGROWTH je nula.
tempdb datové soubory jsou předem přerostlé podle jejich zamýšlených velikostí a nemůžou se dále rozšiřovat. Součet SIZE hodnot pro všechny datové soubory Ano
Všechny ostatní konfigurace Ne

Následující dotaz vám umožní zobrazit aktuální tempdb konfiguraci datového souboru:

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

Pro daný soubor v sadě výsledků:

  • Pokud je maxsize_mb sloupec NULL, pak MAXSIZE je UNLIMITED.
  • Pokud je buď filegrowth_mb nebo filegrowth_percent nula, pak FILEGROWTH je nula.

Pokud nastavíte GROUP_MAX_TEMPDB_DATA_PERCENT a spustíte příkaz ALTER RESOURCE GOVERNOR RECONFIGURE , ale konfigurace datového souboru nesplňuje požadavky, příkaz se úspěšně dokončí a limity procent se uloží, ale nevynucují se. V tomto případě se zobrazí zpráva s upozorněním 10989, závažnost 10, GROUP_MAX_TEMPDB_DATA_PERCENT není platná, protože nejsou splněny požadavky na konfiguraci databáze tempdb. Zpráva se také zaprotokoluje v protokolu chyb.

Aby byly limity procent efektivní, překonfigurujte tempdb datové soubory tak, aby splňovaly požadavky, a spusťte ALTER RESOURCE GOVERNOR RECONFIGURE to znovu. Pro více informací ohledně konfigurace SIZE, FILEGROWTH a MAXSIZE viz Možnosti souboru a skupiny souborů ALTER DATABASE.

Poznámka:

Pro novou instanci SQL Serveru je datový soubor MAXSIZEUNLIMITED a FILEGROWTH je větší než nula, což znamená, že procentuální limity nejsou účinné. Pokud chcete použít procentuální limity, musíte:

  • Připravte tempdb datové soubory do zamýšlených velikostí a nastavte FILEGROWTH na nulu.
  • Nastavte MAXSIZE každého datového souboru na omezenou hodnotu.
    • Pro každý tempdb svazek datového souboru se ujistěte, že součet MAXSIZE hodnot souborů na svazku je menší nebo roven dostupnému místu na disku na svazku.

      Pokud má například svazek 100 GB volného místa a má dva tempdb datové soubory, udělejte MAXSIZE z každého souboru 50 GB nebo méně.

Pokud je v platnosti limit procenta a vy přidáte, odeberete nebo změníte velikost tempdb datových souborů, musíte provést ALTER RESOURCE GOVERNOR RECONFIGURE pro aktualizaci správce prostředků na novou maximální velikost tempdb (100%).

Jak to funguje

Tato část podrobně tempdb popisuje zásady správného řízení prostředků prostoru.

  • Když jsou datové stránky tempdb přidělovány a uvolňovány, správce prostředků udržuje evidenci tempdb prostoru spotřebovaného každou skupinou úloh.

    Pokud je povolený správce prostředků a tempdb pro skupinu úloh je nastavený limit spotřeby místa a požadavek (dotaz) spuštěný ve skupině úloh se pokusí přenést celkovou tempdb spotřebu místa skupinou nad limit, požadavek se přeruší s chybou 1138, závažností 17, nepodařilo se přidělit novou stránku databáze tempdb, protože by překročil limit nastavený pro skupinu úloh název skupiny úloh.

    Pokud je požadavek přerušen chybou 1138, hodnota ve total_tempdb_data_limit_violation_count sloupci zobrazení dynamické správy sys.dm_resource_governor_workload_groups se zvýší o jednu, takže dojde k aktivaci tempdb_data_workload_group_limit_reached rozšířené události.

  • Správce prostředků sleduje veškeré tempdb využití, které lze přiřadit skupině úloh, včetně dočasných tabulek, proměnných (včetně proměnných tabulek), parametrů hodnot tabulky, trvalých tabulek, kurzorů a tempdb využití během zpracování dotazů, jako jsou dočasné úložiště, přesypy, pracovní tabulky a pracovní soubory.

    Spotřeba místa pro globální dočasné tabulky a trvalé tabulky se tempdb započítá do skupiny úloh, která vloží první řádek do tabulky, i když sezení v jiných skupinách úloh přidávají, upravují nebo odebírají řádky ve stejné tabulce.

  • Nakonfigurované tempdb limity spotřeby pro každou skupinu úloh jsou zveřejněny v katalogovém zobrazení sys.resource_governor_workload_groups, ve sloupcích group_max_tempdb_data_mb a group_max_tempdb_data_percent.

    Aktuální spotřeba a maximální spotřeba tempdb místa ve skupině úloh jsou dostupné v zobrazení dynamické správy sys.dm_resource_governor_workload_groups, ve sloupci tempdb_data_space_kb a ve sloupci peak_tempdb_data_space_kb.

    Návod

    tempdb_data_space_kb a peak_tempdb_data_space_kb sloupce v sys.dm_resource_governor_workload_groups jsou zachovány, i pokud nejsou nastavena žádná omezení spotřeby místa tempdb.

    Funkci klasifikátoru a skupiny úloh můžete vytvořit bez počátečního nastavení limitů. Sledujte tempdb využití podle jednotlivých skupin v průběhu času, abyste vytvořili reprezentativní vzory využití, a pak podle potřeby nastavte limity.

  • Tempdbpoužití úložišť verzí včetně trvalého úložiště verzí (PVS) není regulováno, pokud je ve tempdb povolené, protože verze řádků můžou být používány požadavky ve více skupinách úloh.

  • Spotřeba místa ve tempdb se počítá jako počet použitých datových stránek 8-KB. I když stránka není plně vyplněná daty, přidá ke spotřebě 8 kB skupinou úloh tempdb.

  • Tempdb sledování využití prostoru se udržuje po celou dobu existence skupiny úloh. Pokud dojde k vyřazení skupiny úloh, zatímco globální dočasné tabulky nebo netemporární tabulky, k nimž se data účetně vztahují k této skupině úloh, zůstanou v tempdb, prostor využívaný těmito tabulkami není účetně přiřazen žádné jiné skupině úloh.

  • Tempdb Zásady správného řízení prostředků prostoru řídí místo v tempdb datových souborech, ale ne místo na disku na podkladových svazcích. Pokud předem nepřipravíte tempdb datové soubory na jejich zamýšlené velikosti, může být místo na svazku, kde se tempdb nalézají, spotřebováno jinými soubory. Pokud pro datové soubory nezbývá žádné volné místo tempdb, může dojít k výpadku místa pro tempdb před dosažením limitu využití prostoru u jakékoli skupiny úloh tempdb.

  • Zásady správného řízení prostředků prostoru platí tempdb pro datové soubory, ale ne pro soubor transakčního protokolu. Aby transakční protokol tempdb nevyužíval velké množství místa, povolte ADR v tempdb.

Rozdíly ve sledování prostoru na úrovni relace

Dynamické zobrazení sys.dm_db_session_space_usage poskytuje tempdb statistiky přidělování a uvolňování prostoru pro každou relaci. Přestože existuje ve skupině úloh pouze jedna relace, statistiky o využití prostoru poskytované tímto DMV nemusí přesně odpovídat statistikám uvedeným v zobrazení sys.dm_resource_governor_workload_groups z následujících důvodů:

  • Na rozdíl od sys.dm_resource_governor_workload_groups: sys.dm_db_session_space_usage
    • Neodráží tempdb využití místa aktuálně spuštěnými úlohami. Statistiky se sys.dm_db_session_space_usage aktualizují po dokončení úkolu. Statistiky se sys.dm_resource_governor_workload_groups průběžně aktualizují.
    • Nesleduje stránky mapy přidělování indexů (IAM). Další informace najdete v Příručce architektury stránek a rozsahů.
  • Po odstranění řádků nebo při odstranění či zkrácení tabulky, indexu nebo oddílu mohou být datové stránky uvolněny asynchronním procesem běžícím na pozadí. K tomuto zrušení stránky může dojít se zpožděním. sys.dm_resource_governor_workload_groups odráží tyto dealokace stránky, jak k nim dochází, i když relace, která způsobila tyto dealokace, byla uzavřena a již není přítomna sys.dm_db_session_space_usage.

Osvědčené postupy pro správu zdrojů databázového prostoru tempdb

Před konfigurací tempdb zásad správného řízení prostředků prostoru zvažte následující osvědčené postupy:

  • Projděte si obecné osvědčené postupy pro správce prostředků.

  • Ve většině scénářů se vyhněte nastavení limitu tempdb spotřeby místa na malou nebo nulovou hodnotu, zejména pro default skupinu úloh. Pokud to uděláte, může mnoho běžných úloh začít selhávat, pokud potřebují přidělit místo v tempdb. Pokud například nastavíte pevný nebo procentuální limit na 0 pro default skupinu úloh, možná nebudete moct otevřít Průzkumníka objektů v sadě SQL Server Management Studio (SSMS).

  • Pokud jste nevytvořili vlastní skupiny úloh a funkci klasifikátoru, která umístí úlohy do jejich vyhrazených skupin, vyhněte se omezení tempdb využití default skupinou úloh. To může přerušit dotazy s chybou 1138, pokud tempdb stále nemá nevyužité místo, které nemůže využívat žádná uživatelská úloha.

  • Je povoleno, aby součet GROUP_MAX_TEMPDB_DATA_MB hodnot pro všechny skupiny úloh překročil maximální tempdb velikost. Pokud je například maximální tempdb velikost 100 GB, GROUP_MAX_TEMPDB_DATA_MB omezení pro skupinu úloh A a skupinu úloh B můžou být 80 GB.

    Tento přístup stále brání tomu, aby každá skupina úloh zabíjela veškerý prostor tempdb tak, že ponechá 20 GB pro ostatní skupiny úloh. Současně se vyhnete zbytečným přerušením dotazů, pokud je stále k dispozici volné tempdb místo, protože skupiny úloh A a B pravděpodobně nebudou současně spotřebovávat velké množství tempdb místa.

    Podobně může součet GROUP_MAX_TEMPDB_DATA_PERCENT hodnot pro všechny skupiny úloh překročit 100 procent. Pokud víte, že je nepravděpodobné, že by více skupin současně způsobilo vysoké tempdb využití, můžete každé skupině přidělit více tempdb místa.