Причиной многократных попыток запустить на обработку одну и ту же накладную оказался стандартный FormLetterService.run(), который при exception
eadlock удаляет из лога данные о транзакции и запускает все по-новой.
Deadlock происходит на апдейте MCRCustPaymTable и происходит это только во время выполнения батча, когда запускаются все накладные за день в несколько потоков. Запуск нескольких накладных в батче проходит без изъянов, роль играет явно количество.
SQL 2014, флаг 1224 для lock escalation включен.
В trace parser получилось найти только один из двух запросов из дедлока.
В trace parser'e также получилось идентифицировать, что сообщение об ошибке было следующее:
X++:
Deadlock, where one or more users have simultaneously locked the whole table or part of it