Sdílet prostřednictvím


možnost SORT_IN_TEMPDB pro indexy

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLDatabáze SQL v Microsoft Fabric

Při vytváření nebo opětovném sestavení indexu nastavením možnosti SORT_IN_TEMPDB na zapnuto můžete databázový stroj SQL Serveru směrovat, aby pomocí databáze tempdb ukládal výsledky zprostředkujícího řazení, které se používají k sestavení indexu. I když tato možnost zvyšuje množství dočasného místa na disku, které se používá k vytvoření indexu, může tato možnost zkrátit dobu potřebnou k vytvoření nebo opětovnému sestavení indexu, pokud je databáze tempdb na sadě disků, které se liší od databáze uživatele. Další informace o databázi tempdb naleznete v tématu Konfigurace indexu vytvořit možnost konfigurace serveru paměti.

Fáze vytváření indexu

Vzhledem k tomu, že databázový stroj vytváří index, prochází následujícími fázemi:

  • Databázový stroj nejprve prohledá datové stránky základní tabulky a načte hodnoty klíče a vytvoří řádek listu indexu pro každý řádek dat. Pokud jsou interní vyrovnávací paměti třídění vyplněné položkami listového indexu, položky se seřadí a zapíšou na disk jako průběžný běh třídění. Databázový stroj pak obnoví prohledávání datové stránky, dokud se znovu nenaplní vyrovnávací paměti řazení. Tento vzor skenování více datových stránek následovaných řazením a zápisem řadicí větve pokračuje, dokud nebudou zpracovány všechny řádky základní tabulky.

    V clusterovém indexu jsou řádky listu indexu datové řádky tabulky; proto mezisouběrové řazení obsahuje všechny řádky dat. V neklastrovaného indexu můžou řádky listu obsahovat sloupce bez klíče, ale obvykle jsou menší než klastrovaný index. Pokud jsou klíče indexu velké nebo je v indexu zahrnuto několik neklíčových sloupců, může být spuštění neklastrovaného řazení rozsáhlé. Další informace o zahrnutí neklíčových sloupců naleznete v tématu Vytváření indexů se zahrnutými sloupci.

  • Databázový stroj sloučí seřazené průběhy řádků listu indexu do jednoho seřazeného datového toku. Součást sloučení řazení databázového stroje začíná první stránkou každého běhu řazení, najde nejnižší klíč na všech stránkách a předá tento klíč listové součásti pro vytvoření indexu. Další nejnižší klíč se zpracuje a pak další a tak dále. Když se poslední řádek listového indexu extrahuje ze stránky běhu řazení, proces se přesune na další stránku z běhu řazení. Po zpracování všech stránek v rozsahu běhu řazení je tento rozsah uvolněn. Každý řádek indexu listu se předává komponentě pro vytvoření indexu, která je součástí indexové stránky listu ve vyrovnávací paměti. Každá listová stránka je napsaná tak, jak je vyplněná. Při psaní listových stránek vytvoří databázový stroj také horní úrovně indexu. Každá indexová stránka z vyšší úrovně se zapíše při vyplnění.

možnost SORT_IN_TEMPDB

Pokud je SORT_IN_TEMPDB nastaveno na vypnuto, ve výchozím nastavení se řazení uloží do cílové datové skupiny. Během první fáze vytváření indexu střídavá čtení stránek základní tabulky a zápisy v pořadí běhů řazení posunují hlavičky čtení a zápisu disku z jedné části disku do jiné. Hlavy jsou v oblasti datových stránek při skenování datových stránek. Přesunou se do volné oblasti, když se zaplní vyrovnávací paměti třídění a aktuální běh třídění musí být zapsán na disk, a pak se vrátí do oblasti datových stránek, jakmile bude obnoveno skenování stránek tabulky. Pohyb hlavy pro čtení a zápis je ve druhé fázi větší. Během tohoto procesu řazení se obvykle střídá čtení z jednotlivých oblastí řazení. V cílové skupině souborů se sestaví řazení i nové indexové stránky. To znamená, že zatímco databázový stroj rozkládá čtení napříč spuštěními řazení, musí také pravidelně skákat k rozsahům indexu, aby zapisoval nové indexové stránky, jakmile se zaplní.

Pokud je možnost SORT_IN_TEMPDB nastavená na zapnuto a databáze tempdb je na samostatné sadě disků od cílové skupiny souborů, během první fáze se čtení datových stránek vyskytuje na jiném disku než zápisy do pracovní oblasti řazení v databázi tempdb. To znamená, že čtení datových klíčů na disku obvykle pokračuje sériověji a zápisy na disk tempdb jsou také obecně sériové, stejně jako zápisy k sestavení konečného indexu. I když jiní uživatelé používají databázi a přistupují k samostatným diskovým adresám, celkový vzor čtení a zápisů je efektivnější, když je zadán SORT_IN_TEMPDB, než když není.

Možnost SORT_IN_TEMPDB může zlepšit souvislost rozsahů indexů, zejména pokud se operace CREATE INDEX nezpracovává paralelně. Rozsahy pracovní oblasti řazení jsou uvolněny poněkud náhodně, pokud jde o jejich umístění v databázi. Pokud jsou pracovní oblasti řazení obsaženy v cílové skupině souboru, jakmile jsou rozsahy práce řazení uvolněny, mohou být požadavky na rozsahy pro uložení struktury indexu při vytváření splněny. To může randomizovat umístění rozsahů indexu do určité míry. Pokud jsou rozsahy řazení uloženy samostatně v databázi tempdb, pořadí, ve kterém jsou uvolněny, nemá žádný vliv na umístění rozsahů indexu. Pokud jsou mezivýsledky řazení uložené v databázi tempdb místo cílové skupiny souborů, je v cílové skupině souborů více místa k dispozici. Tím se zvýší pravděpodobnost, že rozsahy indexů budou souvislé.

Možnost SORT_IN_TEMPDB ovlivňuje pouze aktuální příkaz. V databázi tempdb žádné záznamy metadat neindikují, zda byl index seřazený nebo neseřazený. Pokud například vytvoříte neclusterovaný index pomocí možnosti SORT_IN_TEMPDB a později vytvoříte clusterovaný index bez zadání této možnosti, databázový stroj při opětovném vytvoření neclusterovaného indexu tuto možnost nepoužije.

Note

Pokud se operace řazení nevyžaduje nebo pokud je možné řazení provést v paměti, je SORT_IN_TEMPDB možnost ignorována.

Požadavky na místo na disku

Pokud nastavíte možnost SORT_IN_TEMPDB na hodnotu ZAPNUTO, musíte mít dostatek volného místa na disku dostupné v databázi tempdb , aby bylo možné uchovávat průběžná řazení, a dostatek volného místa na disku v cílové skupině souborů pro uložení nového indexu. Příkaz CREATE INDEX selže, pokud není dostatek volného místa a existuje nějaký důvod, proč se databáze nemůže automaticky zvětšit, například není žádné místo na disku nebo je automatické zvětšování vypnuto.

Pokud je SORT_IN_TEMPDB nastavená na HODNOTU VYPNUTO, musí být dostupné volné místo na disku v cílové skupině souborů přibližně velikost konečného indexu. Během první fáze jsou sestavovány běhy řazení a vyžadují přibližně stejné místo jako konečný index. Během druhé fáze se každý rozsah běhu třídění uvolní po jeho zpracování. To znamená, že rozsahy dat řazení jsou uvolněny přibližně stejnou rychlostí, jakou jsou rozsahy získávány pro uložení konečných indexových stránek; celkové požadavky na prostor tedy výrazně nepřekračují velikost konečného indexu. Jedním z vedlejších účinků je, že pokud je velikost volného místa velmi blízko velikosti konečného indexu, databázový engine bude rozsahy běhu třídění po uvolnění rychle znovu použít. Vzhledem k tomu, že úseky řazení jsou uvolňovány víceméně náhodně, snižuje se v tomto scénáři kontinuita úseků indexu. Pokud je SORT_IN_TEMPDB nastavená na HODNOTU VYPNUTO, je kontinuita rozsahů indexu vylepšena, pokud je v cílové skupině souborů k dispozici dostatek volného místa, aby rozsahy indexu mohly být přiděleny z souvislého fondu místo z nově uvolněných rozsahů spuštění řazení.

Při vytváření neclusterovaného indexu musíte mít k dispozici volné místo:

  • Pokud je SORT_IN_TEMPDB nastavená na HODNOTU ON, musí být v databázi tempdb dostatek volného místa pro uložení spuštění řazení a dostatek volného místa v cílové skupině souborů pro uložení konečné struktury indexu. Sekvence řazení obsahují řádky listu indexu.

  • Pokud je SORT_IN_TEMPDB nastavená na HODNOTU VYPNUTO, musí být volné místo v cílové skupině souborů dostatečně velké, aby bylo možné uložit konečnou strukturu indexu. Pokud je k dispozici více volného místa, může se zlepšit kontinuita indexu.

Při vytváření clusterovaného indexu v tabulce, která nemá neclusterované indexy, musíte mít k dispozici volné místo:

  • Pokud je SORT_IN_TEMPDB nastaveno na ZAPNUTO, musí být v tempdb dostatek volného místa pro úložiště běhů řazení. Patří sem řádky dat v tabulce. Pro uložení konečné struktury indexu musí být v cílové skupině souborů dostatek volného místa. To zahrnuje datové řádky tabulky a index B-Tree. Je možné, že budete muset upravit odhad pro faktory, jako je velká velikost klíče nebo nízký faktor výplně.

  • Pokud je SORT_IN_TEMPDB nastavená na HODNOTU VYPNUTO, musí být volné místo v cílové skupině souborů dostatečně velké, aby bylo možné uložit konečnou tabulku. To zahrnuje strukturu indexu. Pokud je k dispozici více volného místa, může se zlepšit kontinuita rozsahů tabulky a indexu.

Při vytváření clusterovaného indexu v tabulce, která obsahuje neclusterované indexy, musíte mít k dispozici volné místo:

  • Pokud je SORT_IN_TEMPDB nastavená na hodnotu ZAPNUTO, musí být v databázi tempdb dostatek volného místa pro uložení kolekce řazení pro největší index, obvykle clusterovaný index a dostatek volného místa v cílové skupině souborů k uložení konečných struktur všech indexů. To zahrnuje clusterovaný index, který obsahuje řádky dat tabulky.

  • Pokud je SORT_IN_TEMPDB nastavená na HODNOTU VYPNUTO, musí být volné místo v cílové skupině souborů dostatečně velké, aby bylo možné uložit konečnou tabulku. To zahrnuje struktury všech indexů. Pokud je k dispozici více volného místa, může se zlepšit kontinuita rozsahů tabulky a indexu.

VYTVOŘTE INDEX (Transact-SQL)

Změna uspořádání a opětovného sestavení indexů

ALTER INDEX (Transact-SQL)

Konfigurujte možnost konfigurace paměti serveru pro vytváření indexů

požadavky na místo na disku pro operace indexování DDL