Это происходит, когда два процесса сервера Sql обращаются к одним и тем же ресурсам, но в другом порядке.Поэтому они оба ожидают другого процесса, который является тупиком.
Существует несколько способов предотвратить это, в том числе:
- Избегайте ненужных блокировок.Проверьте уровень изоляции транзакции, требуемый для запроса, используйте
with (nolock)
подсказку блокировки для запросов, где это необходимо. - Убедитесь, что при получении блокировок вы берете блокировки для объектов в том же порядке в каждом запросе.
Например, если Proc1 блокирует table1 и затем table2, но Proc2 блокирует table2 и затем table1, проблема может возникнуть.Чтобы избежать этой проблемы, вы можете переписать любой процесс, чтобы получить блокировки в том же порядке.