Это тупик или нет?

Я попытался запустить несколько (идентичных, но на разных данных) (вложенных) хранимых процедур параллельно на сервере, и, хотя это работает хорошо (при правильных подсказках по блокировке), я в итоге получил следующую ситуацию:

тупик или нет

Для меня это выглядит так, будто spid 116 заблокирован spid 117, а spid 117 заблокирован 116 (ну, некоторые из его потоков есть в каждом случае).

Для продолжения процесса мне пришлось вручную убить одного из них. Я ожидаю, что MSSQL распознает эту ситуацию как "неразрешимую" и заблокирует одну из них. Достаточно забавно, что это случалось дважды, когда я выполнял (почти) одни и те же тесты, хотя и на разных блоках.

Это было на SQL2017 DEV-Edition с 20 ядрами и 96 МБ оперативной памяти; используемые хранимые процедуры довольно сложны и включают операции SELECT, INSERT и UPDATE над одними и теми же таблицами (но разными записями) внутри и вне различных транзакций, распределенных по разным хранимым процедурам. (Звучит хуже, чем есть на самом деле =)

0 ответов

Другие вопросы по тегам