![]() |
#8 |
Участник
|
дедлоки
Два сеанса, работая параллельно, выполняют функцию LOCKTABLE над одними и теми же таблицами, но в разном порядке.
1 процесс A.LOCKTABLE 2 процесс B.LOCKTABLE 1 процесс B.LOCKTABLE - переводится в ожидание 2 процесс A.LOCKTABLE - ожидание бесперспективно, дедлок Такие простые дедлоки распознает сам SQL сервер. На не все дедлоки простые, когда имеется 50 параллельных процессов, ожидания возникают регулярно, целые очереди процессов к различным таблицам. Основной причиной дедлоков является различный ПОРЯДОК установления блокировки таблиц, рекомендуется всегда воспроизводить один и тот же порядок блокировки. Это сложно, если блокировки разбросаны по всему коду транзакции, поэтому мы видим близко к началу учетных кодюнитов (12,22,80,90,...) сгруппированные вместе операции блокировки. Но нарушения все равно есть, это просто ошибки разработчиков, которые очень непросто выявить. Присмотритесь даже к группам блокировок в 80 и 90 кодеюнитах и увидите нарушение порядка. |
|