Почему READ_COMMITTED_SNAPSHOT не включено по умолчанию? - PullRequest
18 голосов
/ 01 сентября 2009

Простой вопрос?

Почему READ_COMMITTED_SNAPSHOT не включено по умолчанию?

Я предполагаю обратную совместимость, производительность или и то и другое?

[Edit] Обратите внимание, что меня интересует эффект, относящийся к уровню изоляции READ_COMMITTED, а не к уровню изоляции моментального снимка.

Почему это было бы критическим изменением, так как оно содержит меньше блокировок и все еще не читает не зафиксированные строки?

Ответы [ 3 ]

19 голосов
/ 02 сентября 2009

Включение моментального снимка по умолчанию приведет к поломке подавляющего большинства приложений

Мне неясно, сломает ли это "подавляющее большинство" приложений. Или, если это сломает много приложений способами, которые трудно идентифицировать и / или трудно обойти. Документация по SQL Server гласит, что READ COMMITTED и READ COMMITTED SNAPSHOT оба удовлетворяют определению ANSI READ COMMITTED. (Заявлено здесь: http://msdn.microsoft.com/en-us/library/ms189122.aspx) Итак, до тех пор, пока ваш код не полагается ни на что, кроме буквального поведения, требуемого ANSI, теоретически с вами все будет в порядке.

Сложность заключается в том, что спецификация ANSI не охватывает всего того, что люди обычно считают такими вещами, как грязное чтение, нечеткое / неповторяющееся чтение и т. Д. На практике. И есть аномалии (разрешенные определениями ANSI), которые могут возникать при READ COMMITTED SNAPSHOT, которые не могут происходить при READ COMMITTED. Например, см. http://www.jimmcleod.net/blog/index.php/2009/08/27/the-potential-dangers-of-the-read-committed-snapshot-isolation-level/.

Также см. http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/d1b3d46e-2642-4bc7-a68a-0e4b8da1ca1b.

Для получения подробной информации о различиях между уровнями изоляции, начните с http://www.cs.umb.edu/cs734/CritiqueANSI_Iso.pdf (READ_COMMITTED_SNAPSHOT не было рядом, когда этот документ был написан, но другие уровни покрыты им).

16 голосов
/ 01 сентября 2009

Оба. Преимущественно совместимость.

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

5 голосов
/ 01 сентября 2009

Он меняет стратегию блокировки по умолчанию на то, как семейство Sybase / SQL Server работало вечно. Это сломало бы все мои приложения, все приложения, которые я знаю в моем магазине, и повредило много важных данных.

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

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

Это компромисс, как и большинство конструкций баз данных. В моем случае я могу иметь дело с блокировками ожидания / взаимоблокировки (редко) в качестве цены за более простую и более «готовую» целостность данных. Мне еще не приходилось сталкиваться с проблемой или проблемой, в которой я вижу изоляцию моментального снимка как решение.

...