Read committed snapshot в порівнянні з snapshot

Найбільш важливою відмінністю цих двох оптимістичних рівнів ізоляції є те, що транзакція snapshot може викликати конфлікти оновлень, коли процес переглядає ті ж дані під час виконання тран ЗАКЦ і не є заблокованим. На противагу цьому рівень ізоляції Read committed snapshot не використовує свій власний XSN при виборі версій рядки. Кожен раз при старті оператора подібна транзакція читає найостанніший XSN, створений для цього примірника системою бази даних, і вибирає рядок з цим номером.

Іншою відмінністю є те, що рівень ізоляції read committed snapshot дозволяє іншим транзакцій виконувати модифікацію даних до того, як буде завершена транзакція контролю версій рядків. Це може привести до конфлікту, якщо інша транзакція змінює дані в проміжку часу, коли транзакція контролю версій рядків виконає читання з подальшою спробою виконання відповідної операції записи. (Для програми, що базується на рівні ізоляції snapshot, система перевіряє можливість виникнення конфлікту і відправляє відповідне повідомлення про помилку.)

Конкурентний доступ в багатокористувацьких системах баз даних може призводити до деяких негативних ефектів, таким як читання неіснуючих даних або втрата змін даних. Database Engine, як і всі інші СУБД, вирішує ці проблеми при використанні транзакцій. Транзакція є послідовністю операторів Transact-SQL, які об'єднуються разом. Всі оператори всередині транзакції становлять атомарному одиницю. Це означає, що або виконуються всі оператори, або в разі помилок всі операції скасовуються.

Для реалізації транзакцій використовується механізм блокування. Завданням блокування є недопущення змін заблокованих об'єктів іншими транзакціями. Блокування має наступні аспекти: режим блокування, гранулярность блокування і тривалість блокування. Режим блокування визначає різні типи блокувань, вибір яких залежить від того ресурсу, який потрібно заблокувати. Тривалість блокування задає часовий період, протягом якого ресурс буде заблокований.

Database Engine надає механізм, званий тригером, який серед інших підтримує загальні обмеження цілісності. Цей механізм детально розглядається в наступному розділі.

j Вправа 13.1

Яке призначення транзакцій?

I Вправа 13.2

У чому різниця між локальної й розподіленої транзакціями?

У чому різниця між неявним і явним видом транзакції?

Які види блокувань сумісні з винятковою блокуванням? j Вправа 13.5

Як ви можете перевірити успішність виконання кожного оператора Transact-SQL?

j Вправа 13.6

Де ви повинні використовувати оператор save transaction? j Вправа 13.7

Поясніть різницю між блокуванням на рівні рядка і на рівні сторінки.

j Вправа 13.8 '.

Чи може користувач явно впливати на поведінку системи при блокування?

j Вправа 13.9

У чому різниця між базовими типами блокувань (колективна і виняткова) і блокуванням з намірами?

j Вправа 13.10

Що означає укрупнення блокування?

Поясніть різницю між рівнями ізоляції read uncommitted і serializable.

I Вправа 13.12

Що таке взаємне блокування?

Який процес використовується в якості "жертви" в ситуації взаємного блокування? Чи може користувач вплинути на процес прийняття системою рішення з цього приводу?