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


Повышение уровня транзакций

Область применения:SQL Server

Повышение транзакций описывает упрощенную локальную транзакцию, которая может быть автоматически повышена до полностью распространяемой транзакции по мере необходимости. Когда управляемая хранимая процедура запускается в рамках транзакции базы данных на сервере, в контексте локальной транзакции запускается код CLR. Если вы открываете подключение к удаленному серверу в транзакции базы данных, подключение к удаленному серверу включено в распределенную транзакцию, а локальная транзакция автоматически повышается до распределенной транзакции.

Таким образом, повышение уровня транзакций сводит к минимуму затраты на распределенные транзакции, откладывая создание распределенной транзакции до тех пор, пока оно не потребуется. Повышение транзакций выполняется автоматически, если оно было включено с помощью ключевого слова Enlist и не требует вмешательства от разработчика. Поставщик данных .NET Framework для SQL Server обеспечивает поддержку повышения уровня транзакций, обрабатываемых через классы в пространстве имен .NET Framework System.Data.SqlClient.

Ключевое слово Enlist

Свойство ConnectionString объекта SqlConnection поддерживает ключевое слово Enlist, указывающее, обнаруживает ли System.Data.SqlClient контексты транзакций и автоматически регистрирует соединение в распределенной транзакции. Если для этого ключевого слова задано значение true (по умолчанию), соединение автоматически прикрепляется к текущему контексту транзакции открывающего потока. Если для этого ключевого слова задано значение false, подключение SqlClient не взаимодействует с распределенной транзакцией. Если Enlist не указан в строке подключения, подключение автоматически задается в распределенную транзакцию, если он обнаружен во время открытия подключения.

Распределенные транзакции

Распределенные транзакции обычно потребляют значительные системные ресурсы. Координатор распределенных транзакций Майкрософт (MS DTC) управляет такими транзакциями и интегрирует все диспетчеры ресурсов, к которым обращаются эти транзакции. С другой стороны, повышение транзакций является специальной формой транзакции System.Transactions, которая эффективно делегирует работу простой транзакции SQL Server. System.Transactions, System.Data.SqlClientи SQL Server координирует работу, связанную с обработкой транзакции, повышая ее до полной распределенной транзакции по мере необходимости.

Преимуществом повышения уровня транзакций является то, что при открытии соединения с активной TransactionScope транзакцией, а другие подключения не открываются, транзакция фиксируется как упрощенная транзакция, а не вызывает дополнительных затрат на полную распределенную транзакцию. Дополнительные сведения о TransactionScopeсм. в разделе Использование system.Transactions.