Udostępnij za pośrednictwem


Blokowanie kursora

W SQL Server, instrukcja SELECT w definicji kursor podlega tej samej transakcji, blokowanie reguły stosowane do żadnych innych zaznacz instrukcję.W kursory jednak dodatkowy zestaw blokad przewijania mogą być nabyte na podstawie specyfikacji poziom współbieżność kursor.

Blokady transakcji nabyte przez każdej instrukcja SELECT, łącznie z instrukcja SELECT w definicję kursor są kontrolowane przez:

  • poziom izolacji transakcji Dla połączenia.

  • Blokowanie wskazówki określone w klauzula FROM.

Te blokady są aktywne aż do końca bieżącej transakcji kursory i niezależnych instrukcji SELECT.Po SQL Server jest tryb autozatwierdzania wynosi każdego indywidualnego instrukcja języka SQL jest transakcją i blokad zwolnione po zakończeniu instrukcji.Jeśli SQL Server jest uruchomiony w jawny lub transakcja niejawna tryb, a następnie blokad są utrzymywane, dopóki transakcja zostanie przekazana lub walcowane Wstecz.

Na przykład blokowaniem sporządzono dla tych dwóch Transact-SQL Przykłady jest zasadniczo taki sam:

/* Example 1 */
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO
BEGIN TRANSACTION
GO
SELECT * FROM AdventureWorks2008R2.Sales.Store;
GO

/* Example 2 */
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO
BEGIN TRANSACTION
GO
DECLARE abc CURSOR STATIC FOR
SELECT * FROM AdventureWorks2008R2.Sales.Store;
GO
OPEN abc
GO

Ustawienie poziom izolacji transakcji na Odczyt powtarzalny oznacza, że niezależne instrukcja SELECT w przykładzie 1 i instrukcja SELECT, zawarte w ZADEKLAROWAĆ kursor 2 przykład wygenerować blokad udziału w każdym wierszu czytać i blokady udziału są aktywne, dopóki transakcja jest przekazana lub wycofana.

Pobieranie blokady

Chociaż kursory przestrzegać te same reguły, niezależnych instrukcji SELECT, dotyczącą typu transakcji blokad, blokad są nabywane w różnym czasie.Blokady generowane przez niezależne SELECT lub kursor są zawsze nabyte podczas pobierania wierszy.Wybierz niezależnych wszystkie wiersze są pobierane po wykonaniu instrukcja.Kursory, jednak pobrać wiersze w różnym czasie, w zależności od typu kursor:

  • Kursory statyczne pobrać cały wynik na czas kursor jest otwarty.To blokuje każdy wiersz wyników przy otwieraniu czas.

  • Kursory zestawu kluczy pobrać kluczy każdy wiersz wyniku na czas kursor jest otwarty.To blokuje każdy wiersz wyników przy otwieraniu czas.

  • Dynamiczne kursory (włączając regularne Kursory progresywne) nie pobrać wiersze, dopóki są one pobierane.Blokady nie są nabywane w wierszach, dopóki one zostały pobrane.

  • Kursory tylko szybkie przesyłanie dalej różnią się pod nabywają ich blokad w zależności od planu wykonania, wybranego przez optymalizator kwerendy.Jeśli wybrano dynamicznego planu bez blokowania są pobierane aż pobierane wiersze.Generowane są worktables, a następnie wczytać do worktable i zablokowane przy otwieraniu wiersze czas.

Kursory obsługują także własne specyfikacji współbieżność, niektóre z nich generować dodatkowe blokady wierszy każdego pobrania.Te blokady przewijania są aktywne aż do następnej operacji pobierania lub do czasu zamknięcia kursor nastąpi wcześniej.Jeśli połączenia opcji zachowywania kursory otwarte na zatwierdzanie jest zestaw , blokady te będą przechowywane przez zatwierdzanie lub wycofywanie operacji.

Zobacz także

Koncepcje