Есть несколько вещей, которые вы можете сделать, чтобы уменьшить количество взаимоблокировок, которые вы получаете, и некоторые вещи, которые вы можете сделать, чтобы полностью устранить их.
Прежде всего, запустите SQL Server Profiler и попросите его датьвы график тупиков .Запустив эту трассировку, вы получите запрос other , который конфликтует с вашим.Ваш запрос довольно прост, хотя я серьезно сомневаюсь, что у вас есть SELECT *
запрос из таблицы MyTable в вашей системе ...
В любом случае, вооружившись графиком взаимоблокировок и другим запросом, вы должны иметь возможностьсказать, какие ресурсы тупиковые.Классическое решение состоит в том, чтобы изменить порядок обоих запросов так, чтобы к ресурсам обращались в одном и том же порядке - это позволяет избежать циклов.
Другие вещи, которые вы можете сделать:
- Ускорить ваши запросы, в частности, применяя к ним правильные индексы.
- Включить изоляцию моментальных снимков в базе данныхи используйте
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
в ваших транзакциях, где это необходимо.Также включите чтение зафиксировано с версионированием строки .Во многих случаях этого достаточно для полного устранения большинства тупиковых ситуаций.Читайте об уровнях изоляции транзакций. Поймите что вы делаете.