Использование IsolationLevel.Snapshot, но БД все еще блокируется

Я являюсь частью команды, создающей веб-сайт на основе ADO.NET. Иногда у нас есть несколько разработчиков и инструмент автоматического тестирования, которые работают одновременно с копией базы данных для разработки.

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

Для использования уровня изоляции снимков мы используем:

<code>ALTER DATABASE <database name>
SET ALLOW_SNAPSHOT_ISOLATION ON;
</code>

и в C #:

<code>Transaction = SqlConnection.BeginTransaction(IsolationLevel.Snapshot);
</code>

Обратите внимание, что снимок IsolationLevel не совпадает с снимком ReadCommitted, который мы также пытались, но в настоящее время не используем.

Когда один из разработчиков входит в режим отладки и приостанавливает приложение .NET, он будет поддерживать соединение с активной транзакцией во время отладки. Теперь я ожидаю, что это не будет проблемой - в конце концов, все транзакции используют уровень изоляции моментального снимка, поэтому, пока одна транзакция приостановлена, другие транзакции должны иметь возможность нормально выполняться, поскольку приостановленная транзакция не удерживает никаких блокировок. Конечно, когда приостановленная транзакция завершается, она может обнаружить конфликт; но это приемлемо, если другие разработчики и автоматизированные тесты могут проходить беспрепятственно.

Однако на практике, когда один человек останавливает транзакцию во время отладки, все другие пользователи БД, пытающиеся получить доступ к одним и тем же строкам, блокируются, несмотря на использование уровня изоляции моментального снимка.

Кто-нибудь знает, почему это происходит, и / или как я могу достичь истинно оптимистичного (неблокирующего) параллелизма?

The resolution (an unfortunate one for me): Ремус Русану отметил, что писатели всегда блокируют других писателей; это подтверждаетсяMSDN - это не совсем так и звучит, но только упоминает, что нужно избегать замков читателя и писателя. Короче говоря, поведение, которое я хочу, не реализовано в SQL Server.

Ответы на вопрос(2)

Ваш ответ на вопрос