Приложение безопасно использовать READ_COMMITTED_SNAPSHOT? - PullRequest
1 голос
/ 08 июля 2010

У меня большое веб-приложение, использующее слой доступа к данным COM для базы данных SQL Server 2005. По умолчанию уровень изоляции READ_COMMITTED. Теперь я понимаю, как работает уровень изоляции READ_COMMITTED_SNAPSHOT, и, читая MSDN, он говорит, что вы можете включить его прозрачно. Тем не менее, я все еще скептически. :) Гарантируется ли в плане реализации, что мое приложение не сломается (не предполагайте, что приложение все делает по книге), если я перейду с READ_COMMITTED на READ_COMMITTED_SNAPSHOT? Никаких дополнительных исключений не будет выброшено на уровень COM? Семантика транзакций одинакова?

PS. Под реализацией я имею в виду что-то вроде того, что уровень изоляции READ_COMMITTED_SNAPSHOT был реализован преднамеренно для работы точно как READ_COMMITTED, просто используя версионирование строк вместо блокировок?

Спасибо за любые идеи или ваш собственный опыт перехода в этот режим изоляции.

1 Ответ

1 голос
/ 07 апреля 2011

Нет, они не имеют одинакового поведения: READ_COMMITTED гарантирует, что при блокировке нет грязных чтений, READ_COMMITTED_SNAPSHOT делает это путем создания снимка таблицы.

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

Хотя в большинстве случаев это не нарушает логику приложения, не гарантируется, что ваше конкретное приложение не использует поведение блокировки.

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

...