Почему в SQL Server возникают взаимоблокировки?

Итак, насколько я понимаю, взаимоблокировки SQL возникают, когда SPID занят обработкой другого запроса, и ему не нужно запускать другой запрос, потому что он сейчас очень занят. SQL Server «случайным образом» выбирает один из запросов для взаимоблокировки из запрошенных ресурсов и не выполняет его, вызывая исключение.

У меня есть приложение, в котором запущено около 40 экземпляров, и внутренняя служба Windows, все из которых попадают в одну и ту же базу данных. Я хочу уменьшить количество взаимоблокировок, чтобы увеличить количество потоков, которые я могу запускать одновременно.

  1. Почему SQL Server не может просто поставить новый запрос в очередь и запустить его, когда у него есть время и ресурсы? Большая часть того, что я делаю, иногда может подождать несколько секунд.
  2. Есть ли способ установить Уровень изоляции транзакции глобально без необходимости указывать его в начале каждого нового соединения / сеанса?
9
задан Jonathan Allen 21 July 2011 в 19:11
поделиться