2009-03-04 13 views
3

Я использую TransactionScope s на высоком уровне, чтобы обернуть некоторый код высокого уровня, который делает несколько соединений с базой данных.Как указать уровень изоляции базы данных для использования на высоком уровне?

Одна из функций, которые я вызываю, является общим чтением, которое используется для функций только для чтения, где необходим уровень изоляции read uncommitted. Но в некоторых случаях он используется как часть большой операции обновления, и более подходящим будет read committed.

На самом высоком уровне, где я вызываю свои функции внутри области транзакций, должен ли я установить уровень изоляции для транзакции?

ответ

4

Вы можете установить уровень изоляции на самом экране TransactionScope. Это то, что вы имели ввиду?

using (var txn = new TransactionScope(
    TransactionScopeOption.Required, 
    new TransactionOptions 
    { 
     IsolationLevel = IsolationLevel.ReadUncommitted 
    } 
)) 
{ 
    // Your LINQ to SQL query goes here 
} 

(код украден из моего блога пост here.)

+0

Спасибо, я не знаю, как я пропустил это. – tpower

1

Вы можете определить уровень изоляции транзакций как на уровне соединения и уровня/отчета о сделке.

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

Имейте в виду, что уровень изоляции по умолчанию для SQL Server является Read Committed, поэтому, если вы устанавливаете другой уровень изоляции на уровне соединения, вам необходимо выполнить переход на Read Commited на уровне транзакции/оператора до вашего обновления ,

Одна вещь, которую следует учитывать, конечно, это оставить уровень изоляции по умолчанию как есть. Существует ли конкретная причина, по которой вы считаете, что Read Committed не подходит для вашей общей активности чтения?

Имеют смысл? Дайте мне знать, если вам нужно уточнить.

Cheers, John

Обновлено Основано на комментариях.

Справедливо, если вы разрабатываете базу данных OLTP высокого уровня, вы можете захотеть взглянуть на технологию/принцип SQL Server, называемый версией строк. Это позволит вам выполнять чтение версии записи, так сказать. При использовании таких методов есть накладные расходы на tempdb, но если вы используете достаточное оборудование, тогда это может быть уместно. Следующая белая бумага является прекрасным руководством для изоляции SQL Server Row Versioning/Snapshot

http://msdn.microsoft.com/en-us/library/ms345124.aspx

+2

Чтение, совершенное, блокирует меня, когда происходит большая операция вставки/удаления. – tpower

 Смежные вопросы

  • Нет связанных вопросов^_^