Sdílet prostřednictvím


Pokyny pro online indexovací operace

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL Database v Microsoft Fabric

Při provádění online indexovacích operací platí následující pokyny:

  • Clusterované indexy musí být vytvořeny, znovu sestaveny nebo vyřazeny offline, pokud podkladová tabulka obsahuje následující velké datové typy objektu (LOB): obrázek, ntexta text.
  • Nevýznamné neclusterované indexy lze vytvořit online, pokud tabulka obsahuje sloupce používající datové typy LOB, ale žádný z těchto sloupců se v definici indexu nepoužívá jako klíčové nebo zahrnuté sloupce.
  • Indexy místních dočasných tabulek nelze vytvářet, přepracovat ani odstranit online. Toto omezení neplatí pro indexy globálních dočasných tabulek.
  • Operaci online indexu můžete spustit jako obnovitelnou operaci pomocí RESUMABLE klauzule CREATE INDEX nebo ALTER INDEX. Obnovitelná operace indexu se může restartovat po neočekávaném selhání, selhání databáze a převzetí služeb, nebo příkazu ALTER INDEX PAUSE a pokračovat tam, kde došlo k přerušení.

Poznámka

Online indexovací operace nejsou k dispozici v každé edici Microsoft SQL Serveru. Seznam funkcí podporovaných edicemi SQL Serveru najdete v tématu Edice a podporované funkce systému SQL Server 2022.

Následující tabulka ukazuje operace indexu, které lze provádět online, indexy, které jsou vyloučeny z těchto online operací, a obnovitelná omezení indexu. K dispozici jsou také další omezení.

Operace online indexu Vyloučené indexy Další omezení
ALTER INDEX REBUILD Zakázaný clusterovaný index nebo indexované zobrazení

XML index

Indexování na místní dočasné tabulce
Zadání klíčového slova ALL může způsobit selhání operace, pokud tabulka obsahuje vyloučený index.

Platí další omezení pro znovuvytvoření deaktivovaných indexů. Další informace najdete v tématu Zakázání indexů a omezení.
CREATE INDEX Index XML

Počáteční jedinečný clusterovaný index v zobrazení

Index na místní dočasné tabulce
CREATE INDEX WITH DROP_EXISTING Zakázaný clustrovaný index nebo zakázané indexované zobrazení

Index na místní dočasné tabulce

Index XML
DROP INDEX Deaktivovaný index

Index XML

Neclusterovaný index

Index na místní dočasné tabulce
V rámci jednoho příkazu nelze zadat více indexů.
ALTER TABLE ADD CONSTRAINT (PRIMARY KEY nebo UNIQUE) Indexování místní dočasné tabulky

Clusterovaný index
Najednou je povolena pouze jedna podkložka. Ve stejném příkazu ALTER TABLE například nemůžete přidávat a vyhazovat omezení PRIMARY KEY nebo UNIQUE.
ALTER TABLE DROP CONSTRAINT (PRIMARY KEY nebo UNIQUE) Clusterovaný index

Podkladovou tabulku nelze upravit, zkrátit ani vynechat, zatímco probíhá online operace indexu.

Nastavení online možnosti (ON nebo OFF) zadané při vytváření nebo vyřazení clusterovaného indexu se použije u všech neclusterovaných indexů, které je nutné znovu vytvořit. Pokud je například clusterovaný index vytvořený online pomocí CREATE INDEX WITH DROP_EXISTING, ONLINE=ON, všechny přidružené neclusterované indexy se také znovu vytvoří online.

Když vytvoříte nebo znovu sestavíte index UNIQUE online, tvůrce indexů a souběžná transakce uživatele se mohou pokusit vložit stejný klíč, čímž dojde k porušení jedinečnosti. Pokud se řádek zadaný uživatelem vloží do nového indexu (cíle) před přesunutím původního řádku ze zdrojové tabulky do nového indexu, operace online indexu selže.

I když to není běžné, operace online indexu může způsobit zablokování při interakci s aktualizacemi databáze kvůli aktivitám uživatelů nebo aplikací. V těchto výjimečných případech je jako oběť zablokování vybrána aktivita uživatele nebo aplikace.

Souběžné operace DDL indexu online můžete provádět ve stejné tabulce nebo zobrazení pouze v případě, že vytváříte více nových neclusterovaných indexů nebo reorganizujete neclusterované indexy. Všechny ostatní online indexovací operace prováděné ve stejnou dobu selžou. Nemůžete například vytvořit nový index online při opětovném sestavení existujícího indexu online ve stejné tabulce.

Online operaci nelze provést, když index obsahuje sloupec velkého typu objektu a stejná transakce provádí úpravy dat před zahájením operace online indexu. Chcete-li tento problém vyřešit, přesuňte online index operace mimo transakci nebo ho přesuňte před všechny změny dat ve stejné transakci.

Důležité informace o místu na disku

Online indexovací operace vyžadují více místa na disku než operace offline indexu.

  • Během operací vytváření indexu a opětovného sestavení indexu se vyžaduje další místo pro sestavení (nebo opětovné sestavení indexu). Tento dodatečný prostor je obvykle stejný jako aktuální prostor obsazený indexem, ale může být větší nebo menší v závislosti na kompresi použité v aktuálním nebo znovu sestaveném indexu.
  • Kromě toho je pro dočasný index mapování vyžadováno místo na disku. Tento dočasný index se používá v online operacích indexu, které vytvářejí, znovu sestavují nebo odstraňují clusterovaný index.
  • Vyřazení clusterovaného indexu online vyžaduje tolik místa jako vytvoření (nebo opětovné sestavení) clusterovaného indexu online.

Další informace najdete v tématu Požadavky na místo na disku pro operace DDL indexu.

Důležité informace o výkonu

Operace online indexu sice umožňují souběžnou aktivitu aktualizace uživatelů, ale operace indexu můžou trvat déle, pokud je aktivita aktualizace velká. Online indexovací operace jsou obvykle pomalejší než ekvivalentní offline indexové operace bez ohledu na úroveň souběžné aktivity aktualizace.

Vzhledem k tomu, že se během operace online indexu udržují zdrojové i cílové struktury, zvýší se využití prostředků pro vložení, aktualizaci a odstranění transakcí, které se potenciálně zdvojnásobí. To může způsobit snížení výkonu a vyššího využití prostředků, zejména času procesoru během operace indexu. Online indexovací operace jsou plně protokolované.

I když doporučujeme online operace, měli byste vyhodnotit své prostředí a konkrétní požadavky. Může být optimální spustit operace indexu offline. Uživatelský přístup k datům je během operace omezený, ale operace se dokončí rychleji a využívá méně prostředků.

V počítačích s multiprocesorem, na kterých běží SQL Server 2016 (13.x) a novějších verzích, můžou operace indexu používat paralelismus k provádění operací prohledávání a řazení přidružených k příkazu indexu. Pomocí možnosti MAXDOP indexu můžete řídit stupeň paralelismu online operace indexu. Tímto způsobem můžete vyrovnávat prostředky používané operací indexu s prostředky souběžných uživatelů. Další informace najdete v tématu Konfigurace paralelních operací indexu. Další informace o edicích SQL Serveru, které podporují paralelní indexové operace, naleznete v tématu Edice a podporované funkce sql Serveru 2022.

Vzhledem k tomu, že je držen zámek sdílení (S) nebo zámek úpravy schématu (Sch-M) v závěrečné fázi operace indexu, buďte opatrní při provádění online operace indexu například uvnitř explicitní uživatelské transakce, jako je blok BEGIN TRANSACTION ... COMMIT. To způsobí, že zámky se budou uchovávat až do konce transakce a potenciálně blokují další úlohy.

Pokud jsou zámky indexové stránky zakázány pomocí ALLOW_PAGE_LOCKS=OFF, může opětovné sestavení indexu zvýšit fragmentaci indexu, pokud je spuštěn s MAXDOP, které je větší než 1. Další informace naleznete v tématu Jak to funguje: Online opětovné sestavení indexu - může způsobit zvýšenou fragmentaci.

Důležité informace o transakčním protokolu

Rozsáhlé operace indexu prováděné offline nebo online můžou generovat velké objemy transakčního protokolu. Důvodem je to, že se plně protokolují operace opětovného sestavení offline i online indexu. Chcete-li zajistit, aby operace indexu byla vrácena zpět, transakční protokol nelze zkrátit, dokud nebude operace indexu dokončena; Protokol je však možné zálohovat během operace indexu.

Proto musí mít transakční protokol dostatek místa k uložení transakcí operace indexu i všech souběžných uživatelských transakcí během operace indexu. Další informace naleznete v tématu Místo na disku protokolu transakcí pro operace indexu.

Online indexové operace nezpůsobí vysoký růst transakčního logu, pokud je povoleno zrychlené obnovení databáze (ADR).

Důležité informace o trvalém úložišti verzí

Pokud je povolené ADR, vytvoření nebo opětovné sestavení velkého indexu online může podstatně zvýšit velikost úložiště trvalých verzí (PVS), zatímco probíhá operace indexu. Ujistěte se, že databáze má dostatek volného místa pro růst PVS. Další informace najdete v tématu Monitorování a řešení potíží s akcelerovaným obnovením databáze.

Aspekty obnovitelného indexu

Možnost indexu RESUMABLE pro CREATE INDEX a ALTER INDEX platí pro SQL Server (ALTER INDEX počínaje SQL Serverem 2017 (14.x) a CREATE INDEX počínaje SQL Serverem 2019 (15.x)), Azure SQL Database a Azure SQL Managed Instance. Další informace naleznete v tématu CREATE INDEX a ALTER INDEX.

Pokud chcete použít možnost RESUMABLE, musíte také použít možnost ONLINE. Při vytváření nebo opětovném sestavení indexu s možností obnovení platí následující pokyny:

  • Máte lepší kontrolu nad správou, plánováním a rozšiřováním časových období údržby indexů. Operaci vytvoření nebo opětovného sestavení indexu můžete pozastavit a restartovat několikrát, aby vyhovovala časovým obdobím údržby.
  • Můžete se zotavit ze selhání vytvoření nebo přeindexování (například při přepnutí databáze na záložní režim nebo nedostatku místa na disku), aniž byste museli znovu restartovat operaci indexu od začátku.
  • Když je pozastavena operace indexu, původní i nově vytvořený index vyžadují místo na disku a je potřeba je aktualizovat během operací DML.
  • Možnost SORT_IN_TEMPDB=ON není podporovaná.
  • Zakázané indexy se nepodporují.

Spropitné

Operace obnovitelného indexu nevyžadují velkou transakci, což umožňuje časté zkracování protokolu během této operace a zabránit velkému nárůstu protokolu. Data potřebná k obnovení a dokončení operace indexu jsou uložená v datových souborech databáze.

Obecně platí, že mezi obnovitelnými a nepřesitelnými online indexovými operacemi neexistuje žádný rozdíl v výkonu. Pro operace s obnovitelnou funkcí CREATE INDEXje zde trvalá režie, která by mohla způsobit výrazně pomalejší operace u menších tabulek.

Při pozastavení operace indexu s možností obnovení:

  • U většiny úloh čtení je snížení výkonu nevýznamné.
  • U úloh náročných na aktualizace můžete zaznamenat snížení propustnosti v závislosti na konkrétních specifikách úloh.

Obecně platí, že neexistuje žádný rozdíl v kvalitě defragmentace mezi obnovitelným a neobnovitelným online vytvářením nebo přestavbou indexu.

Poznámka

Pokud je operace online indexu pozastavena, transakce, která vyžaduje výhradní (X) uzamčení tabulky obsahující pozastavený index, selžou. K tomu může dojít například u operací INSERT ... WITH (TABLOCK). V tomto případě se zobrazí chyba 10637:

Cannot perform this operation on '<object name>' with ID (<object ID>) as one or more indexes are currently in resumable index rebuild state. Please refer to sys.index_resumable_operations for more details.

Chcete-li vyřešit chybu 10637, odeberte z transakce TABLOCK poznámku nebo zrušte pozastavení operace indexu a počkejte na dokončení, než znovu zkusíte transakci.

Výchozí možnosti online

Výchozí možnosti operací indexů na úrovni databáze můžete nastavit jako online a přerušitelné pomocí konfigurace databáze ELEVATE_ONLINE nebo ELEVATE_RESUMABLE. S těmito výchozími možnostmi se můžete vyhnout náhodnému spuštění operace offline indexu, která znepřístupňuje tabulku nebo index, když je spuštěná. Obě možnosti způsobí, že databázový stroj automaticky zvýší úroveň určitých operací indexu na online nebo obnovitelné spuštění.

Možnost můžete nastavit jako FAIL_UNSUPPORTED, WHEN_SUPPORTEDnebo OFF. Pro ELEVATE_ONLINE a ELEVATE_RESUMABLEmůžete nastavit různé hodnoty . Další informace naleznete v tématu ALTER DATABASE SCOPED CONFIGURATION.

ELEVATE_ONLINE i ELEVATE_RESUMABLE se vztahují pouze na příkazy DDL, které podporují online a obnovitelnou syntaxi. Pokud se například pokusíte vytvořit index XML s ELEVATE_ONLINE=FAIL_UNSUPPORTED, operace se spustí offline, protože indexy XML nepodporují možnost ONLINE. Možnosti ovlivňují pouze příkazy DDL odeslané bez zadání ONLINE nebo RESUMABLE možnosti. Například zadáním prohlášení s ONLINE=OFF nebo RESUMABLE=OFFmůže uživatel přepsat nastavení FAIL_UNSUPPORTED a spustit prohlášení v offline režimu a/nebo bez možnosti obnovení.

Poznámka

ELEVATE_ONLINE a ELEVATE_RESUMABLE se nevztahují na operace indexování XML.