Sdílet prostřednictvím


Jak fungují online operace indexu

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

Tento článek definuje struktury, které existují během operace online indexu, a zobrazuje aktivity přidružené k těmto strukturám.

Online indexové struktury

Pokud chcete během operace DDL (Index Data Definition Language) povolit souběžnou aktivitu uživatelů, používají se během online operace indexu následující struktury: zdrojové a existující indexy, cíl a opětovné sestavení haldy nebo vyřazení clusterovaného indexu online, dočasného indexu mapování.

  • Zdrojové a existující indexy

    Zdrojem je původní tabulka nebo data clusterovaného indexu. Existující indexy jsou všechny neclusterované indexy, které jsou přidružené ke zdrojové struktuře. Pokud například online operace indexu znovu sestaví clusterovaný index se čtyřmi přidruženými neclusterovanými indexy, zdroj je existující clusterovaný index a existující indexy jsou neclusterované indexy.

    Existující indexy jsou k dispozici souběžným uživatelům pro výběr, vložení, aktualizaci a odstranění operací. To zahrnuje hromadné vkládání (podporované, ale nedoporučuje se během online operace indexu) a implicitní aktualizace aktivačními událostmi a omezeními referenční integrity. Všechny existující indexy jsou k dispozici pro dotazy. To znamená, že optimalizátor dotazů je může vybrat a v případě potřeby je specifikuje v nápovědě indexu.

  • Target

    Cílem může být nový index (nebo halda) nebo sada nových indexů, které se právě vytvářejí nebo znovu sestavují. Operace vložení, aktualizace a odstranění uživatele do zdroje použije databázový stroj v cíli během operace indexu. Pokud například online operace indexu znovu sestaví clusterovaný index, cílem je znovu sestavený clusterovaný index; Databázový stroj při opětovném vytvoření clusterovaného indexu nepřestaví neclusterované indexy.

    Cílový index se nepoužívá, dokud není operace indexu potvrzena. Index je interně označen jako pouze pro zápis.

  • Dočasný index mapování

    Online indexové operace, které vytvářejí, odstraňují nebo znovu sestavují clusterovaný index, vyžadují také dočasný index mapování. Tento dočasný index používají souběžné transakce k určení záznamů, které se mají odstranit v nových indexech, které se vytvářejí při aktualizaci nebo odstranění řádků ve zdrojové tabulce. Tento neclusterovaný index se vytvoří ve stejném kroku jako nový clusterovaný index (nebo haldu) a nevyžaduje samostatnou operaci řazení. Souběžné transakce udržují dočasný index mapování ve všech operacích vložení, aktualizace a odstranění.

Aktivity indexování online

Během online operace indexu, například vytvoření clusterovaného indexu v neindexované tabulce (haldy), zdroj a cíl procházejí třemi fázemi: příprava, sestavení a konečné.

Rozšířenou progress_report_online_index_operation událost můžete použít ke sledování průběhu online operace indexu.

Následující obrázek znázorňuje proces vytvoření počátečního clusterovaného indexu online. Zdrojový objekt (halda) nemá žádné další indexy. Aktivity zdrojové a cílové struktury se zobrazují pro každou fázi; zobrazí se také souběžné operace uživatele SELECT, INSERT, UPDATE a DELETE. Fáze přípravy, sestavení a konečné fáze jsou označeny společně s režimy uzamčení, které se používají v každé fázi.

Diagram znázorňující aktivity prováděné během online operace indexu

Aktivity struktury zdroje

Následující tabulka uvádí aktivity zahrnující zdrojové struktury během každé fáze operace indexu a odpovídající strategii uzamčení.

Phase Zdrojová aktivita Zámky přístupu ke zdroji
Preparation

Krátká fáze
Příprava systémových metadat pro vytvoření nové prázdné struktury indexu

Je definován snímek tabulky. To znamená, že správa verzí řádků slouží k zajištění konzistence čtení na úrovni transakcí.

Souběžné uživatelské operace zápisu ve zdroji jsou zablokované po krátkou dobu.

Kromě vytváření více neclusterovaných indexů nejsou povoleny žádné souběžné operace DDL.
Sdílené (S) v tabulce1

Sdílený záměr (IS)

Úprava schématu (Sch-M) zámek objektu s podtypem prostředku INDEX_OPERATION2
Build

Hlavní fáze
Data se skenují, seřadí, sloučí a vloží do cíle pomocí hromadného načítání.

Souběžný uživatel INSERT, UPDATE, DELETEa MERGE operace se použijí na existující indexy i všechny nové indexy, které se sestavují.
Sdílený záměr (IS)

Sch-Mzámek objektu s podtypem INDEX_OPERATION zdroje 2
Final

Krátká fáze
Všechny nepotvrzené transakce zápisu musí být dokončeny před zahájením této fáze. V závislosti na získaném uzamčení jsou všechny nové transakce čtení nebo zápisu uživatele zablokované po krátkou dobu, dokud se tato fáze neskončí.

Systémová metadata se aktualizují tak, aby nahradila zdroj cílem.

Zdroj se v případě potřeby zahodí, například po opětovném sestavení nebo vyřazení clusterovaného indexu.
Sch-Mzámek objektu s podtypem INDEX_OPERATION zdroje 2

Sdílená (S) v tabulce, pokud vytváříte neklastrovaný index.1

Sch-M Pokud se zahodí nějaká zdrojová struktura (index nebo tabulka). 1

1 Operace indexu čeká na dokončení všech nepotvrzených transakcí zápisu, než získá S zámek nebo Sch-M zámek na tabulce. Pokud probíhá dlouhotrvající dotaz, operace online indexu počká, dokud se dotaz nedokončí. Pokud se nepoužívají zámky s nízkou prioritou, může to tvořit blokující řetězec.

2Sch-M Zámek objektu s podtypem INDEX_OPERATION prostředku zabraňuje provádění souběžných operací jazyka DDL (Data Definition Language) na zdrojových a stávajících strukturách během probíhající operace indexu. Tento zámek například brání souběžnému opětovnému sestavení dvou indexů ve stejné tabulce. I když se jedná o Sch-M zámek, nebrání příkazům pro manipulaci s daty.

Předchozí tabulka ukazuje jeden sdílený zámek (S) získaný během fáze sestavení operace online indexu, která zahrnuje jeden index. Když se clusterové a neclusterové indexy (znovu)sestaví v rámci jedné online operace indexu (například při počátečním vytvoření clusterového indexu v tabulce, která obsahuje jeden nebo více neclusterových indexů), během fáze sestavení jsou získány dva krátkodobé S zámky, za kterými následují dlouhodobé zámky záměru sdílení (IS). Jeden S zámek se získá jako první pro vytvoření clusterovaného indexu. Po vytvoření clusterovaného indexu se pro vytvoření neclusterovaných indexů získá druhý krátkodobý S zámek. Po vytvoření neclusterovaných indexů je zámek snížen na S zámek, a to až do dokončení konečné fáze operace online indexu.

Další informace o tom, jak se používají zámky a jak je můžete spravovat, najdete v tématu WAIT_AT_LOW_PRIORITY s online operacemi indexu.

Aktivity cílové struktury

Následující tabulka uvádí aktivity, které zahrnují cílovou strukturu během každé fáze operace indexu a odpovídající strategii uzamčení.

Phase Cílová aktivita Cílové zámky
Preparation Vytvoří se nový index a nastaví se jako pouze pro zápis. Sdílený záměr (IS)
Build Data se vloží ze zdroje.

Změny uživatele (vložení, aktualizace, odstranění) použité na zdroj se použijí také na cíl.

Tato aktivita je pro uživatele transparentní.
Sdílený záměr (IS)
Final Metadata indexu se aktualizují.

Index je nastavený na stav čtení a zápisu.
Sdílené (S) nebo modifikace schématu (Sch-M)

Cíl není přístupný pro uživatelské dotazy, dokud se nedokončí indexovací operace.

Po dokončení přípravné nebo konečné fáze mohou být dotazové plány uložené v mezipaměti plánu zneplatněny.

Životnost kurzoru deklarovaného v tabulce, která je součástí online indexové operace, je omezená fázemi online indexu. V každé fázi jsou aktualizační kurzory neplatné. Kurzory jen pro čtení jsou zneplatněny až po závěrečné fázi.