Уровни изоляции, основанные на управлении версиями строк, в компоненте Database Engine

В компоненте Microsoft SQL Server Database Engine по-новому реализован существовавший уровень изоляции транзакций read committed, который обеспечивает моментальный снимок уровня инструкций, основанный на управлении версиями строк. Компонент SQL Server Database Engine также представляет новый уровень изоляции транзакций — уровень моментального снимка, который обеспечивает моментальный снимок уровня транзакций, основанный на управлении версиями строк.

Уровень изоляции READ COMMITTED, основанный на управлении версиями строк, включается с помощью параметра базы данных READ_COMMITTED_SNAPSHOT, установленного в значение ON. Изоляция моментального снимка включается установкой параметра базы данных ALLOW_SNAPSHOT_ISOLATION в значение ON. Если какой-либо из параметров базы данных включен, то компонент Database Engine хранит версии каждой измененной строки. Если транзакция модифицирует строку, то изображение этой еще не модифицированной строки копируется на страницу в хранилище версий. Хранилище версий — это коллекция страниц данных в базе данных tempdb. Если несколько транзакций модифицируют строку, то несколько версий строки связываются в цепочку версий. Операции считывания, использующие управление версиями строк, восстанавливают последнюю версию каждой строки, зафиксированной до начала транзакции.

В приложениях, которые были написаны для SQL Server 2000 или появились в SQL Server, уровень изоляции транзакций read committed основан на управлении версиями строк и реализован следующим образом: необходимо задать уровень изоляции транзакции read committed, когда параметр READ_COMMITTED_SNAPSHOT установлен в значение ON. Все операции считывания просматривают версии строк, которые были зафиксированы к моменту начала выполнения инструкции. Это обеспечивает моментальный снимок данных уровня инструкций.

В приложениях, написанных для SQL Server, изоляция моментального снимка выполняется указанием уровня изоляции транзакции моментального снимка, если параметр базы данных ALLOW_SNAPSHOT_ISOLATION установлен в значение ON. Все операции считывания в транзакции моментального снимка просматривают версии строк, которые были зафиксированы во время начала транзакции. Это обеспечивает моментальный снимок данных уровня транзакции.

В транзакциях, использующих уровень изоляции, основанный на управлении версиями строк, операции считывания не запрашивают разделяемые блокировки данных. Это означает, что модули чтения, использующие управление версиями строк, не блокируют другие модули чтения или модули записи, осуществляющие доступ к тем же самым данным. Аналогично модули записи не блокируют модули чтения. Однако модули записи могут блокировать друг друга, даже если выполняются при уровне изоляции, основанном на управлении версиями строк. Две операции записи не могут одновременно модифицировать одни и те же данные.

В следующей таблице описываются разделы, в которых приводятся дополнительные сведения об уровнях изоляции, основанных на управлении версиями строк.

Раздел

Описание

Основные сведения об уровнях изоляции на основе управления версиями строк

Описывается основные понятия управления версиями строк.

Выбор уровня изоляции на основе управления версиями строк

Описываются преимущества и недостатки управления версиями строк; даются рекомендации по созданию сценариев, наиболее подходящих для управления версиями строк.

Включение основанных на управлении версиями строк уровней изоляции

Описываются параметры, которые включают управление версиями строк в базе данных.

Использование уровней изоляции строк на основе управления версиями

Описываются ограничения уровней изоляции, основанных на управлении версиями строк.

Использование ресурсов при управлении версиями строк

Описывается, как управление версиями строк влияет на систему; обсуждаются динамические административные представления и счетчики производительности, которые возвращают сведения о состоянии управления версиями строк в базе данных и транзакциях.