Некоторые причины возникновения дедлоков в SQL Server:
- Неправильный дизайн базы данных. 1 Например, отсутствие индексов, плохо разработанные запросы, ненужные или слишком длинные явные транзакции. 1
- Неожиданное изменение нагрузки на систему. 2 Например, если на сервере начинают выполняться новые запросы или в системе заканчивается количество рабочих потоков. 2
- Использование разделанной таблицы и настройка LOCK_ESCALATION на AUTO. 2 Когда этот параметр установлен в AUTO, повышается параллельность, так как механизм базы данных SQL Server блокирует разделы таблицы на уровне HoBT, а не на уровне таблицы. 2 Однако когда отдельные транзакции держат блокировки разделов в таблице и хотят получить блокировку в другом разделе, это вызывает дедлок. 2
Для понимания причин возникновения дедлоков в SQL Server можно проанализировать граф дедлока, который показывает, какие процессы и ресурсы были задействованы в тупиковой ситуации. 1