См. в этой статье для иллюстрации ситуации взаимоблокировки, которая может вызвать эту ошибку.
Когда вы DETACH DELETE
узел, это вызывает попытку удалить этот узел и все его отношения, что вызывает попытку наложения блокировки записи на каждый из них. Кроме того, попытка удаления отношения приводит к попытке установить блокировку записи на каждом из его конечных узлов.
Вот одна последовательность событий, которая может вызвать взаимоблокировку с двумя запросами:
- Транзакция 1 начинает выполнение
DETACH DELETE member
. Это начинается с установки блокировки записи на узле member
. - Транзакция 2 начинает выполнение
DETACH DELETE lag
. Это начинается с установки Write-Lock на lag
узле. - Транзакция 1 начинает удаление связей узла
member
, что, в свою очередь, вызывает попытку Write-Lock того же самого lag
узел, для которого транзакция 2 уже имеет блокировку. - транзакция 2 начинает удаление связей узла
lag
, что, в свою очередь, вызывает попытку записи-блокировки того же узла member
, что и транзакция 1 блокировка уже включена.
В результате возникла тупиковая ситуация.
Как указано в вышеприведенной статье, вы можете повторять запросы, которые испытывают такие типы TransientException
с, поскольку маловероятно, что при повторной попытке также возникнет тупиковая ситуация.