W przypadku wielu aktualizacji tego samego rekordu w jednej transakcji, ile wersji jest przechowywanych?

11

Zgodnie z artykułem MSDN autorstwa Kimberly L. Tripp, Neal Graves's SQL Server 2005 Wiersz w wersji opartej na wersjach izolacji

  • „... Wszystkie wcześniejsze wersje określonego rekordu są powiązane łańcuchem na liście połączonej; w przypadku długookresowych transakcji opartych na wersjach wierszy łącze będzie musiało zostać przejrzane przy każdym dostępie, aby uzyskać spójną transakcyjnie wersję rząd"

która znajduje się w sekcji „Zrozumienie wersjonowania wierszy”, które jest wspólne dla następujących sekcji: „Wersjonowanie wierszy w czytaniu zatwierdzone za pomocą wersjonowania wierszy” i „Wersjonowanie wierszy w izolacji migawki”.

Dalej na przykładzie wersjonowania wierszy z powodu modyfikacji podano w kontekście wielu aktualizacji tego samego rekordu przez wiele transakcji (T1, T2, T3) tylko w SNAPSHOT.

W przypadku, gdy tylko jedna transakcja aktualizuje rekord wiele razy (za pomocą wielu wyciągów), czy wiele sklepów z wersjami będzie przechowywanych (powiązanych), czy tylko jeden zapisany w momencie wykonania „obrazu” SNAPSHOT?

Cóż, odpowiedź na to pytanie powinna od razu odpowiedzieć na moje inne powiązane pytania:

W pełni odporny
źródło

Odpowiedzi:

11

W przypadku wielu aktualizacji tego samego rekordu w jednej transakcji, ile wersji jest przechowywanych?

Tylko jeden.

Pierwsza aktualizacja wiersza generuje wersję wiersza i wyłącznie blokuje wiersz. Późniejsze aktualizacje tego samego wiersza w ramach tej samej transakcji nie generują nowych wersji wierszy.


Połączona lista wersji wierszy może powstać w następujący sposób:

  • Transakcja T1 w transakcji SNAPSHOT odczytuje wiersz i widzi wartość „a”.

  • Transakcja T2 (pod dowolnym poziomem izolacji) aktualizuje wartość z „a” na „b” i zatwierdza. To generuje wersję wiersza dla wartości „a”.

  • Transakcja T3 (pod dowolnym poziomem izolacji) aktualizuje wartość z „b” na „c” i zatwierdza. To generuje wersję wiersza dla wartości „b”. Ta wersja wiersza prowadzi do poprzedniej wersji wiersza dla „a”.

  • Transakcja T1 odczytuje wartość wiersza, przechodząc przez link z wartości zapisanej na bieżącej stronie („c”) do wersji wiersza „b”, a następnie z powrotem do wersji wiersza „a”.

Wersje wierszy są generowane przez zmiany danych bez względu na to, czy istnieje transakcja odczytu (na dowolnym poziomie izolacji). Wersje mogą nigdy nie być potrzebne, ale nadal są generowane - ta sama połączona lista wersji jest tworzona nawet bez transakcji T1.

Paul White 9
źródło