Как указать уровень изоляции базы данных для использования на высоком уровне? - PullRequest
3 голосов
/ 04 марта 2009

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

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

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

Ответы [ 2 ]

4 голосов
/ 04 марта 2009

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

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

(Код украден из моего блога здесь .)

1 голос
/ 04 марта 2009

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

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

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

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

Имеет смысл? Дайте мне знать, если вам нужны дальнейшие разъяснения.

Ура, Джон

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

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

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

...