Database Engine поддерживает механизм оптимистического управления параллельной работы, основанный на контроле версий строк. Когда данные изменяются с использованием контроля версий строк, то для всех изменяемых данных в базе данных поддерживаются логические копии. Каждый раз, когда изменяется строка, система базы данных сохраняет ее образ до изменения подтвержденной строки в системной базе данных tempdb. Каждая версия отмечается последовательным номером транзакции (XSN) той транзакции, которая выполнила это изменение. (XSN используется для уникальной идентификации транзакций.) Самая последняя версия строки всегда сохраняется в базе данных и соединяется через список связей с соответствующей версией, сохраненной в tempdb. Старая версия строки в базе данных tempdb может содержать указатели на другую, еще более старую версию этой строки. Каждая версия строки сохраняется в базе данных tempdb до тех пор, пока существуют операции, которым она может потребоваться.
Контроль версий строк изолирует транзакции от эффектов модификаций, выполненных другими транзакциями, без необходимости запроса разделяемых блокировок для строк, которые были прочитаны. Значительное сокращение общего количества требуемых блокировок для этого уровня изоляции сильно увеличивает доступность данных. Однако исключительные блокировки все еще необходимы: транзакции, использующие оптимистический уровень изоляции, называемый snapshot, требуют блокировок, когда они модифицируют строки.
Контроль версий строк, помимо прочего, используется для:
♦ поддержки уровня изоляции read committed snapshot;
♦ поддержки уровня изоляции snapshot;
♦ создания в триггерах таблиц inserted и deleted.
Далее описаны уровни изоляции read committed snapshot и snapshot, подробно рассматриваются таблицы inserted и deleted.