У разі декількох оновлень одного запису за одну транзакцію, скільки версій зберігається?


11

Відповідно до статті MSDN Кімберлі Л. Тріпп, ізоляція транзакцій на основі версії SQL Server 2005 року Ніла Грейвса

  • "... Всі більш ранні версії певного запису приковані до пов'язаного списку; а у випадку тривалих транзакцій на основі версій, що здійснюються на основі версій, посилання доведеться проходити на кожному доступі, щоб дійти до послідовно трансакційної версії рядок "

який знаходиться в розділі "Розуміння версій версій", загальним для того, щоб дотримуватися розділів "Рядок версій у читаннях, здійснених за допомогою версійної версії" та "Версія рядків у розділі" Знімок ".

Далі на прикладі версійної версії внаслідок модифікацій наведено в контексті декількох оновлень однієї і тієї ж записи за допомогою декількох транзакцій (T1, T2, T3) лише в SNAPSHOT.

У випадку, якщо лише одна транзакція оновлює запис кілька разів (за допомогою декількох заяв), чи зберігатимуться (пов'язані) кілька сховищ версій або лише той, який зроблений на момент зняття "зображення" SNAPSHOT?

Що ж, відповідь на це питання повинна негайно відповісти на інші мої очікувані відповідні запитання:

Відповіді:


11

У разі декількох оновлень одного запису за одну транзакцію, скільки версій зберігається?

Тільки один.

Перше оновлення до рядка генерує версію рядка і виключно блокує рядок. Пізніші оновлення до того самого рядка в межах однієї транзакції не створюють нових версій рядків.


Зв'язаний список версій рядків може виникнути наступним чином:

  • Транзакція T1 в транзакції SNAPSHOT читає рядок і бачить значення "a".

  • Транзакція T2 (під будь-яким рівнем ізоляції) оновлює значення від 'a' до 'b' і здійснює комісію. Це генерує версію рядка для значення "a".

  • Транзакція T3 (під будь-яким рівнем ізоляції) оновлює значення з 'b' до 'c' і здійснює коммісії. Це створює версію рядка для значення "b". Ця версія рядка посилається на попередню версію рядка для 'a'.

  • Транзакція T1 зчитує значення рядка, переходячи посилання від значення, збереженого на поточній сторінці ('c'), до рядкової версії 'b', а потім назад до версії рядка 'a'.

Версії рядків створюються змінами даних незалежно від того, чи існує існуюча транзакція зчитування (на будь-якому рівні ізоляції). Версії ніколи не знадобляться, але вони все одно генеруються - той самий пов'язаний список версій створюється навіть без транзакції T1.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.