Udostępnij za pomocą


Jak działają operacje indeksowania online

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

W tym artykule zdefiniowano struktury istniejące podczas operacji indeksu online i pokazano działania skojarzone z tymi strukturami.

Struktury indeksów online

Aby umożliwić współbieżne działanie użytkownika podczas operacji języka definicji danych indeksu (DDL), podczas operacji indeksu online są używane następujące struktury: indeksy źródłowe i istniejące, docelowe oraz do odbudowy sterty lub porzucania indeksu klastrowanego w trybie online, tymczasowego indeksu mapowania.

  • Indeksy źródłowe i istniejące

    Źródłem są oryginalne dane tabeli lub indeksu klastrowanego. Istniejące indeksy to wszystkie indeksy nieklastrowane, które są skojarzone ze strukturą źródłową. Jeśli na przykład operacja indeksu online ponownie kompiluje indeks klastrowany, który ma cztery skojarzone indeksy nieklastrowane, źródłem jest istniejący indeks klastrowany, a istniejące indeksy są indeksami nieklastrowanym.

    Istniejące indeksy są dostępne dla współbieżnych użytkowników na potrzeby operacji wybierania, wstawiania, aktualizowania i usuwania. Obejmuje to operacje wstawiania zbiorczego (obsługiwane, ale niezalecane podczas operacji indeksu online) oraz aktualizacje wywołane przez wyzwalacze i ograniczenia integralności referencyjnej. Wszystkie istniejące indeksy są dostępne dla zapytań. Oznacza to, że mogą być wybrane przez optymalizator zapytań i, w razie potrzeby, określone w wskazówkach indeksu.

  • Target

    Docelowym elementem jest nowy indeks (lub sterta) lub zestaw nowych indeksów, które są tworzone lub przebudowywane. Operacje wstawiania, aktualizowania i usuwania danych do źródła są stosowane przez silnik bazy danych na dane docelowe w trakcie operacji indeksowania. Jeśli na przykład operacja indeksu online ponownie kompiluje indeks klastrowany, obiektem docelowym jest ponownie skompilowany indeks klastrowany; Aparat bazy danych nie kompiluje indeksów nieklastrowanych podczas odbudowy indeksu klastrowanego.

    Indeks docelowy nie jest używany, dopóki operacja na indeksie nie zostanie zatwierdzona. Wewnętrznie indeks jest oznaczony jako tylko do odczytu.

  • Indeks mapowania tymczasowego

    Operacje indeksu online, które tworzą, upuszczają lub ponownie kompilują indeks klastrowany, również wymagają tymczasowego indeksu mapowania. Ten indeks tymczasowy jest używany przez transakcje współbieżne w celu określenia, które rekordy mają zostać usunięte w nowych indeksach tworzonych podczas aktualizowania lub usuwania wierszy w tabeli źródłowej. Ten nieklastrowany indeks jest tworzony w tym samym kroku co nowy indeks klastrowany (lub sterta) i nie wymaga oddzielnej operacji sortowania. Transakcje współbieżne utrzymują tymczasowy indeks mapowania we wszystkich operacjach wstawiania, aktualizowania i usuwania.

Działania indeksu online

Podczas operacji indeksowania online, takiej jak tworzenie indeksu klastrowanego na nieindeksowanej tabeli (sterta), źródło i cel przechodzą przez trzy fazy: przygotowywanie, budowanie i finalizacja.

Możesz użyć rozszerzonego zdarzenia progress_report_online_index_operation, aby monitorować postęp operacji indeksu online.

Poniższa ilustracja przedstawia proces tworzenia początkowego indeksu klastrowanego w trybie online. Obiekt źródłowy (sterta) nie ma żadnych innych indeksów. Działania struktury źródłowej i docelowej są wyświetlane dla każdej fazy; Wyświetlane są również współbieżne operacje użytkownika SELECT, INSERT, UPDATEi DELETE . Fazy przygotowania, kompilacji i końcowej są wskazywane wraz z trybami blokady używanymi w każdej fazie.

Diagram przedstawiający działania wykonywane podczas operacji indeksowania online.

Działania struktury źródłowej

W poniższej tabeli wymieniono działania obejmujące struktury źródłowe w każdej fazie operacji indeksowania i odpowiednią strategię blokowania.

Phase Aktywność źródłowa Blokady źródłowe
Preparation

Faza krótka
Przygotowanie metadanych systemu w celu utworzenia nowej pustej struktury indeksu.

Zdefiniowano migawkę tabeli. Oznacza to, że przechowywanie wersji wierszy służy do zapewnienia spójności odczytu na poziomie transakcji.

Przez krótki czas równoczesne operacje zapisu przez użytkowników w źródle danych są blokowane.

Nie są dozwolone żadne współbieżne operacje DDL z wyjątkiem tworzenia wielu indeksów nieklastrowanych.
Udostępnione (S) w tabeli1

Udostępnione intencje (IS)

Blokada modyfikacji schematu (Sch-M) obiektu z zasobem podtyp INDEX_OPERATION2
Build

Faza główna
Dane są skanowane, sortowane, scalane i wstawiane do obiektu docelowego przy użyciu operacji ładowania zbiorczego.

Współbieżne operacje użytkownika INSERT, , UPDATEDELETEi MERGE są stosowane zarówno do istniejących indeksów, jak i do tworzonych nowych indeksów.
Udostępnione intencje (IS)

Sch-Mblokada obiektu z podtypem zasobu INDEX_OPERATION2
Final

Faza krótka
Wszystkie transakcje zapisu danych, które nie zostały zatwierdzone, muszą zostać ukończone przed rozpoczęciem tej fazy. W zależności od nabytej blokady wszystkie nowe transakcje odczytu lub zapisu użytkownika są blokowane przez krótki okres aż do zakończenia tego etapu.

Metadane systemu są aktualizowane w celu zastąpienia źródła elementem docelowym.

Źródło jest usuwane, jeśli jest to wymagane, na przykład po odbudowie lub usunięciu klastrowanego indeksu.
Sch-Mblokada obiektu z podtypem zasobu INDEX_OPERATION2

Udostępnione (S) w tabeli w przypadku tworzenia indeksu nieklastrowanego.1

Sch-M jeśli jakakolwiek struktura źródłowa (indeks lub tabela) zostanie porzucona. 1

1 Operacja indeksowania czeka na ukończenie transakcji zapisu, które nie zostały zatwierdzone, przed uzyskaniem blokady S lub Sch-M w tabeli. Jeśli trwa długotrwałe zapytanie, operacja indeksu online czeka na zakończenie zapytania. Jeśli nie są używane blokady o niskim priorytcie, może to stanowić łańcuch blokujący.

2 Blokada Sch-M obiektu z podtypem INDEX_OPERATION zasobu uniemożliwia wykonywanie współbieżnych operacji języka definicji danych (DDL) na źródłowych i istniejących strukturach, gdy operacja indeksu jest w toku. Na przykład ta blokada uniemożliwia równoczesne ponowne kompilowanie dwóch indeksów w tej samej tabeli. Mimo że jest to blokada Sch-M, nie uniemożliwia wykonywania instrukcji manipulowania danymi.

W poprzedniej tabeli przedstawiono pojedynczą blokadę udostępnioną (S) uzyskaną podczas fazy kompilacji operacji indeksu online, która obejmuje pojedynczy indeks. Gdy indeksy klastrowane i nieklastrowane są tworzone lub odtwarzane w ramach jednej operacji indeksu online (na przykład podczas początkowego tworzenia klastrowanego indeksu w tabeli zawierającej jeden lub więcej indeksów nieklastrowanych), dwie krótkoterminowe blokady S są nabywane w fazie budowy, a następnie nabywane są długoterminowe blokady intencji współdzielenia IS. Jedna S blokada jest najpierw uzyskiwana na potrzeby tworzenia klastrowanego indeksu. Po utworzeniu indeksu klastrowanego zostanie uzyskana druga krótkoterminowa S blokada do tworzenia indeksów nieklastrowanych. Po utworzeniu indeksów nieklastrowanych blokada S zostanie obniżona do blokady IS do ostatniej fazy operacji indeksowania online.

Aby uzyskać więcej informacji na temat użycia zamków i sposobu zarządzania nimi, zobacz WAIT_AT_LOW_PRIORITY przy użyciu operacji indeksowania online.

Działania struktury docelowej

W poniższej tabeli wymieniono działania, które obejmują strukturę docelową w każdej fazie operacji indeksowania i odpowiednią strategię blokowania.

Phase Działanie docelowe Blokady celów
Preparation Nowy indeks jest tworzony i ustawiany na wartość tylko do zapisu. Udostępnione intencje (IS)
Build Dane są wstawiane ze źródła.

Modyfikacje użytkownika (wstawki, aktualizacje, usunięcia) stosowane do źródła są również stosowane do elementu docelowego.

To działanie jest przejrzyste dla użytkownika.
Udostępnione intencje (IS)
Final Metadane indeksu są aktualizowane.

Indeks jest ustawiony na stan odczytu/zapisu.
Współużytkowany (S) lub modyfikacja schematu (Sch-M)

Obiekt docelowy nie jest uzyskiwany przez zapytania użytkownika, dopóki operacja indeksu nie zostanie ukończona.

Po zakończeniu fazy przygotowawczej lub końcowej, plany zapytań przechowywane w pamięci podręcznej planów mogą zostać unieważnione.

Czas życia kursora zdefiniowanego w tabeli, biorącej udział w operacji indeksu online, jest ograniczony przez fazy indeksu online. Kursory aktualizacji są unieważniane na każdym etapie. Kursory tylko do odczytu są unieważniane dopiero po ostatniej fazie.