Какую изоляцию базы данных мы должны использовать для того же, и какой уровень изоляции лучше? - PullRequest
0 голосов
/ 28 января 2011

В SQL Server 2005,

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

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

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

Это может быть возможно с «уровнем изоляции моментального снимка трансляции».но он выберет старые данные моментальных снимков в базе данных Teampdb, что может снизить производительность.

что вы предлагаете?

Ответы [ 3 ]

1 голос
/ 29 января 2011

Вы должны использовать SNAPSHOT уровень изоляции. Лучше всего включить функцию READ COMMITTED SNAPSHOT на уровне базы данных, которая автоматически преобразует все транзакции READ COMMITTED по умолчанию в транзакции моментальных снимков.

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

Единственный уровень изоляции, который никогда не следует использовать, - НЕОГРАНИЧЕННЫЙ. Это напрашивается на неприятности. Грязные чтения - это непоследовательные чтения .

REPEATABLE и SERIALIZABLE имеют чрезвычайно узкие варианты использования, и вам, скорее всего, они никогда не понадобятся. К сожалению, SERIALIZABLE злоупотребляет .Net System.Transactions и MTS / COM +, поэтому многие приложения в конечном итоге используют его (и из-за этого возникают огромные проблемы с масштабируемостью), хотя это и не требуется.

1 голос
/ 28 января 2011

READ COMMITTED - уровень изоляции транзакции по умолчанию в SQL Server.

Использование любого другого уровня изоляции (для меня, так или иначе) представляет собой кодовый запах & mdash; для меня, по крайней мере & mdash; это требует некоторого реального обоснования, с возможным исключением ограниченного использования READ UNCOMMITTED в определенных контекстах.

0 голосов
/ 29 января 2011

Если первая транзакция обновила данные в некоторой таблице, то вторая все равно будет ждать получения этих данных (кроме уровня изоляции READ UNCOMMITTED, но в этом случае вы можете иметь очень противоречивые данные).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...