От себя хочу добавить - я видел не разрюхиваемые MS SQL дидлоки при неаккуратной работе с номерными сериями. Ну скажем - если у тебя одно и тоже приложение пытается достучаться до numberSequenceTable или numberSequenceList и через специально выделенную сессию - и через общую сессию - последствия будут крайне плачевные.
Скажем:
Клиент 1
Сессия 1
читает таблицу inventSum и блокирует ее до конца транзакции
Читает таблицу numberSequenceTable и блокирует ее до конца транзакции
Сессия пытается читать inventTrans и ждет освобождения ее от блокировки.
Клиент 2
Сессия 1
Читает таблицу inventTrans и блокирует ее
Сессия 2
Пытается читать таблицу NumberSeqeunceTable - ждет освобождения ее от блокировки.
В итоге - клиент1 бесконечно ждет освобождения inventTransа захваченного клиентом2, а клиент2 ждет освобождения numberSequenceTable, захваченного клиентом1.
Налицо - классический дидлок, однако MS SQL не в состоянии это дело понять и пресечь - поскольку не осознает что две сессии клиента 2 связаны друг с другом и ожидают освобождения блокировок вместе.
|