Eskalację blokady (aparat bazy danych)

Eskalację blokady jest procesem konwertowania wiele blokad ziarna grzywny na mniej blokady grubej ziarna, zmniejszenie systemu napowietrznych, przy jednoczesnym zwiększeniu prawdopodobieństwa rywalizacja współbieżność.

Jako Aparat baz danych programu SQL Server nabywa niskiego poziom blokad również umieszcza blokad konwersji obiektów, które zawierają obiekty niższego poziom:

  • Gdy blokowanie wierszy lub indeks klucz zakresów, Aparat baz danych umieszcza blokada zamierzona na stronach, które zawierają wiersze lub kluczy.

  • Gdy blokowanie stron, Aparat baz danych umieszcza blokada konwersji na wyższej poziom obiektów zawierających strony.Oprócz blokada zamierzona do obiektu blokad konwersji strona wymagane są dla następujących obiektów:

    • Strony poziom liścia zbudowania indeksów

    • Strony danych indeksów klastrowanych

    • Strony danych sterty

Aparat baz danych Może być zarówno wiersza i strona blokada dla tej samej instrukcja zminimalizować liczbę blokad i zmniejszenia prawdopodobieństwa, eskalacja blokad będą niezbędne.Na przykład Aparat baz danych można umieścić strona blokady na indeks nieklastrowany (jeśli wystarczająco ciągłe klucze w węźle indeksu są zaznaczone do zaspokojenia kwerendy) i blokad wiersza w danych.

Eskalować blokady, Aparat baz danych próbuje zmienić blokada zamierzona na tabela odpowiadające pełnej blokady, na przykład zmiana konwersji wyłączności (IX) blokowanie blokady wyłączności (X) lub zamiarem współużytkowane blokady (IS) udostępnionego blokady (S)).Jeśli powiedzie się próba eskalacja blokad i pełnego blokada tabeli został nabyty, a następnie wszystkie sterty lub B-drzewo, strona (strona) lub poziom wierszy (RID) blokad transakcji sterty lub indeksu są zwalniane.Jeśli nie można pobrać pełnego blokada, eskalację blokada nie odbywa się na, czas i Aparat baz danych będzie nadal nabywać wiersza, klucz lub strona blokad.

Aparat baz danych Nie eskalować wiersza lub zakres klucz blokad blokad strona, ale przypiszą je bezpośrednio do tabela blokad.Podobnie strona blokady są zawsze przekazany do tabela blokad.W SQL Server 2008, blokowanie tabel podzielonym na partycje może eskalować do poziom HoBT dla skojarzonego partycji zamiast do blokada tabela.Poziom HoBT blokada niekoniecznie jest blokada HoBTs wyrównany partycji.

Ostrzeżenie

Poziom HoBT blokad zwykle zwiększyć współbieżność, ale wprowadzenie możliwości zakleszczenia podczas transakcji, które są blokady na różnych partycjach chcesz rozwinąć ich wyłącznej blokady innych partycjach.W rzadkich przypadkach mogą działać lepiej ziarnistość blokowania tabeli.

Jeśli eskalacja blokad próba nie powiedzie się z powodu konfliktu blokada przechowywane przez jednoczesnych transakcji Aparat baz danych ponowi próbę eskalacja blokad na każde dodatkowe blokada 1,250 nabyte przez transakcję.

Każde zdarzenie eskalacji działa przede wszystkim poziom pojedynczego Transact-SQL instrukcja.Po uruchomieniu zdarzenie, Aparat baz danych próbuje eskalować wszystkie blokady własnością bieżącej transakcji w dowolnej tabeli, do których istnieją odwołania przez instrukcja akcji pod warunkiem, że spełnia on wymagania progowe eskalacji.Jeśli zdarzenie eskalacji rozpoczyna się przed instrukcja uzyskał dostęp do tabela, nie jest podejmowana próba eskalować blokad w tej tabela.Jeśli eskalację blokada powiedzie się, wszystkie blokada nabyte przez transakcję w poprzedniej deklaracji i nadal przechowywane w czas uruchamia zdarzenie zostanie przekazany, jeśli tabela odwołuje się aktualne oświadczenie i uwzględnione w eskalacji zdarzeń.

Na przykład załóżmy, że sesja wykonuje następujące operacje:

  • Rozpoczyna transakcję.

  • Aktualizacje TableA.Generuje blokad wyłączne wiersza w TableA odbywające się aż do jej zakończenia.

  • Aktualizacje TableB.Generuje blokad wyłączne wiersza w TableB odbywające się aż do jej zakończenia.

  • Wybierz, który jest przyłączany wykonuje TableA z TableC.Plan wykonania kwerend wywołuje dla wierszy, które mają być pobrane z TableA przed pobraniem wierszy z TableC.

  • Wyzwalacze instrukcja SELECT eskalacja blokad podczas jest pobieranie wierszy z TableA i przed uzyskał dostęp TableC.

Jeśli eskalacja blokad powiedzie się tylko blokada przez sesja TableA są przekazany.Obejmuje to blokady współużytkowane z instrukcji SELECT i wyłącznej blokady z poprzedniego instrukcja UPDATE.Podczas tylko blokad sesja nabyte w tabelaa dla instrukcja SELECT są liczone do ustalenia, jeśli eskalacja blokad powinno być wykonane, po pomyślnym eskalacji wszystkie blokady utrzymywane przez sesja w tabelaa są przekazany do blokadę wyłączności na tabelai wszystkich innych ziarnistość dolnym blokad, włączając blokad konwersji na tabelaa są zwalniane.

Nie jest podejmowana próba eskalować blokady na TableB powodu active odwołań do TableB w instrukcja SELECT.Podobnie nie jest podejmowana próba eskalować blokad na TableC, które nie są przekazany ponieważ on miał nie jeszcze dostępu do po wystąpieniu eskalacją.

Progi eskalacji Lock

eskalacja blokadPo wyzwoleniu eskalacja blokad nie jest wyłączona w tabela przy użyciu opcji zmiany LOCK_ESCALATION USTAWIĆ tabela i gdy istnieje jeden z następujących warunków:

  • Jeden Transact-SQL instrukcja nabywa co najmniej 5000 blokad dla pojedynczej tabela nonpartitioned lub indeks.

  • Jeden Transact-SQL co najmniej 5000 blokady na jednej partycji tabela podzielonym na partycje i ALTER tabela nabywa instrukcja zestaw jest opcja LOCK_ESCALATION zestaw do AUTO.

  • Liczba blokad w wystąpienie z Aparat baz danych przekracza progi pamięci lub konfiguracja.

Jeśli blokada nie przekazany z powodu konfliktów blokada Aparat baz danych Okresowo wyzwala eskalacja blokad w każdym 1,250 blokad nowe.

Próg eskalacji instrukcji Transact-SQL

Blokowanie eskalacji jest wyzwalane, gdy Transact-SQL instrukcja nabywa co najmniej 5000 blokady na odwołanie pojedynczej tabeli lub indeksu, lub, jeśli tabela jest podzielony na partycje, pojedyncza tabela partycji lub indeksu partycji.Na przykład eskalację blokada nie jest wyzwalany Jeśli instrukcja nabywa 3000 blokad w jeden indeks i 3000 blokad innego indeksu w tej samej tabela.Podobnie eskalacja blokad nie zostanie wywołany, jeśli instrukcja zawiera autosprzężenie w tabela i każde odwołanie do tabela tylko nabywa 3000 blokad w tabela.

Eskalację blokady występuje tylko dla tabel, które były dostępne w czas Eskalacja zostanie wywołany.Załóżmy, że single SELECT instrukcja jest sprzężenie, łączący trzy tabele w tej sekwencji: TableA, TableB, i TableC.Instrukcja nabywa 3000 blokad wiersza w indeks klastrowany dla TableA i co najmniej 5000 blokad wiersza w indeks klastrowany dla TableB, ale nie została jeszcze dostępne TableC.Gdy Aparat baz danych wykryje, że instrukcja uzyskał co najmniej 5000 blokad wiersza w TableB, próbuje eskalować wszystkie blokady przechowywane przez bieżącą transakcję TableB.Również próby eskalować wszystkie blokady przechowywane przez bieżącą transakcję TableA, ale ponieważ liczbę blokad dla TableA jest < 5000 Eskalacja nie powiodą się.Nie eskalacja blokad próby dla TableC , ponieważ on miał nie jeszcze dostępu do po wystąpieniu eskalacją.

Próg eskalacji wystąpienia aparatu bazy danych

Gdy liczba blokad jest większa niż próg pamięci dla eskalacja blokad, Aparat baz danych wyzwalaczy eskalacja blokad.Próg pamięci zależy od ustawienia z blokad opcji konfiguracja:

  • Jeśli blokad ustawiona opcja jego domyślne zestaw 0, a następnie eskalacja blokad osiągnięciu progu pamięci używanej przez blokowanie obiektów po 24 procent pamięci używanej przez Aparat baz danych, z wyłączeniem AWE pamięci.Struktura danych używana do reprezentowania blokada jest około 100 bajtów.Próg ten jest dynamiczny ponieważ Aparat baz danych dynamicznie nabywa i zwolnić pamięć, aby dopasować zmiennych obciążeń.

  • Jeśli blokad opcji jest wartość inną niż 0, a następnie próg eskalacja blokad wynosi 40 procent (lub mniej if jest presji pamięci) wartości opcji blokad.

Aparat baz danych Można wybierać żadnych instrukcja aktywnej sesja dla eskalacji i co 1,250 nowe blokad go wybiorą sprawozdań eskalacji tak długo, jak użycie pamięci blokada w wystąpienie pozostaje powyżej progu.

Zamocowaniem mieszanych typów Lock

Gdy eskalacja blokad występuje blokada wybranych dla sterty lub indeksu jest wystarczająco mocne, aby spełnić wymagania najbardziej restrykcyjne niższy poziom blokada.

Załóżmy na przykład, sesja:

  • Rozpoczyna transakcję.

  • Aktualizuje tabela zawierającą indeks klastrowany.

  • Problemy z instrukcja SELECT, która odwołuje się do tej samej tabela.

Instrukcja UPDATE nabywa te blokady:

  • Blokuje wyłączności (X) w wierszach zaktualizowane dane.

  • Blokuje wyłączne konwersji (IX) na stronach indeks klastrowany zawierających te wiersze.

  • IX blokada na indeks klastrowany i innej tabela.

Instrukcja SELECT nabywa te blokady:

  • Współużytkowane blokada (S) na wszystkich wierszy danych odczytuje, chyba, że wiersz jest już chronione przez blokowanie x z instrukcja UPDATE.

  • blokada udziału konwersji na wszystkich stronach indeks klastrowany zawierające te wiersze, chyba że strona jest już chronione przez blokowanie IX.

  • Nie blokada indeks klastrowany lub tabela, ponieważ są one już chroniony IX blokad.

Jeśli instrukcja SELECT nabywa wystarczająco blokada, aby wyzwolić eskalacja blokad Eskalacja powiedzie się, IX blokadę tabela jest konwertowany na blokadę x i wierszy, strona i blokad indeksu są zwalniane.Aktualizacje oraz odczyty są chronione przez x blokada w tabela.

Blokowanie redukujących i Eskalacja

W większości przypadków Aparat baz danych zapewnia najlepszą wydajność podczas pracy z jego domyślne ustawienia blokada i eskalacja blokad.Jeśli wystąpienie Aparat baz danych generuje dużo blokada i jest oglądanie eskalacyjnego częste blokada, Rozważ zmniejszenie kwoty blokada przez:

  • Za pomocą poziom izolacji, które nie generują blokady współużytkowane operacji odczytu.

    • Poziom izolacji ODCZYTAĆ POPEŁNIONYCH podczas READ_COMMITTED_SNAPSHOT opcji bazy danych jest włączone.

    • Poziom izolacji MIGAWKI.

    • Odczyt NIEPRZEKAZANY poziom izolacji.To jest używane tylko dla systemów, które może działać z odczytów dirty.

Ostrzeżenie

Zmiana poziom izolacji ma wpływ na wszystkie tabele w wystąpieniu Aparat baz danych.

  • Za pomocą PAGLOCK lub TABLOCK tabela wskazówki mają Aparat baz danych strona, sterty, lub blokad indeksu zamiast wierszy blokad.Jednak za pomocą tej opcji zwiększa problemów użytkowników blokowania innych użytkowników próbujących uzyskać dostęp do tych samych danych i nie powinny być używane w systemach zawierających więcej niż kilku równoczesnych użytkowników.

  • Dla tabel partycji za pomocą opcji LOCK_ESCALATION ALTER tabelaeskalować blokad poziom HoBT w tabela lub wyłącz eskalacja blokad.

Za pomocą flagi śledzenia 1211 i 1224 wyłączenie wszystkich lub niektórych eskalacyjnego blokada.Aby uzyskać więcej informacji, zobacz Flagi śledzenia (Transact-SQL).Ponadto monitorowanie eskalacja blokad za pomocą SQL Server Profiler eskalację blokada: zdarzenie; i Za pomocą SQL Server Profiler.