Поделиться через


Работа с изоляцией моментального снимка

В SQL Server 2005 появился новый уровень изоляции «моментального снимка», предназначенный для повышения параллелизма приложений оперативной обработки транзакций (OLTP). В предыдущих версиях SQL Server параллелизм был основан исключительно на блокировках, что могло вызвать проблемы с блокировками и взаимоблокировками для некоторых приложений. Изоляция моментального снимка зависит от расширений управления версиями строк и предназначена для улучшения производительности путем исключения сценариев блокировки модулей чтения или записи.

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

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

Поставщик OLE DB для собственного клиента SQL Server

Поставщик OLE DB для собственного клиента SQL Server располагает улучшениями, в которых используются преимущества изоляции моментальных снимков, введенные в SQL Server 2005. Среди этих улучшений — изменения наборов свойств DBPROPSET_DATASOURCEINFO и DBPROPSET_SESSION.

DBPROPSET_DATASOURCEINFO

Набор свойств DBPROPSET_DATASOURCEINFO изменен и указывает на поддержку уровня изоляции моментальных снимков благодаря добавлению значения DBPROPVAL_TI_SNAPSHOT, используемого в свойстве DBPROP_SUPPORTEDTXNISOLEVELS. Это новое значение указывает, что уровень изоляции моментального снимка поддерживается независимо от того, включено ли в базе данных управление версиями. Ниже приведен список значений DBPROP_SUPPORTEDTXNISOLEVELS:

Cвойство

Описание

DBPROP_SUPPORTEDTXNISOLEVELS

Тип: VT_I4

Чтение-запись: Только для чтения

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

  • DBPROPVAL_TI_CHAOS

  • DBPROPVAL_TI_READUNCOMMITTED

  • DBPROPVAL_TI_BROWSE

  • DBPROPVAL_TI_CURSORSTABILITY

  • DBPROPVAL_TI_READCOMMITTED

  • DBPROPVAL_TI_REPEATABLEREAD

  • DBPROPVAL_TI_SERIALIZABLE

  • DBPROPVAL_TI_ISOLATED

  • DBPROPVAL_TI_SNAPSHOT

DBPROPSET_SESSION

Набор свойств DBPROPSET_SESSION изменен и указывает на поддержку уровня изоляции моментальных снимков благодаря добавлению значения DBPROPVAL_TI_SNAPSHOT, используемого в свойстве DBPROP_SESS_AUTOCOMMITISOLEVELS. Это новое значение указывает, что уровень изоляции моментального снимка поддерживается независимо от того, включено ли в базе данных управление версиями. Ниже приведен список значений DBPROP_SESS_AUTOCOMMITISOLEVELS:

Cвойство

Описание

DBPROP_SESS_AUTOCOMMITISOLEVELS

Тип: VT_I4

Чтение-запись: Только для чтения

Описание: Задает битовую маску, которая указывает уровень изоляции транзакции в режиме автоматической фиксации. Значения, которые можно установить в этой битовой маске — такие же, как устанавливаемые для DBPROP_SUPPORTEDTXNISOLEVELS.

ПримечаниеПримечание

Ошибки DB_S_ERRORSOCCURRED или DB_E_ERRORSOCCURRED происходят, если значение DBPROPVAL_TI_SNAPSHOT установлено при использовании версий SQL Server, предшествующих SQL Server 2005.

Сведения о поддержке изоляции моментального снимка в транзакциях см. в разделе Поддержка локальных транзакций.

Драйвер ODBC для собственного клиента SQL Server

Драйвер ODBC для собственного клиента SQL Server обеспечивает изоляцию моментальных снимков благодаря улучшениям в функциях SQLSetConnectAttr и SQLGetInfo.

SQLSetConnectAttr

Функция SQLSetConnectAttr поддерживает использование атрибута SQL_COPT_SS_TXN_ISOLATION. Задание SQL_COPT_SS_TXN_ISOLATION значения SQL_TXN_SS_SNAPSHOT указывает, что транзакция произойдет на уровне изоляции моментального снимка.

SQLGetInfo

Функция SQLGetInfo поддерживает значение SQL_TXN_SS_SNAPSHOT, добавленное в сведения о типе SQL_TXN_ISOLATION_OPTION.

Сведения о поддержке изоляции моментального снимка в транзакциях см. в разделе Уровень изоляции транзакций курсора.