Показать сообщение отдельно
Старый 13.10.2005, 11:26   #8  
pikunov is offline
pikunov
Участник
 
1 / 10 (1) +
Регистрация: 13.10.2005
дедлоки
Два сеанса, работая параллельно, выполняют функцию LOCKTABLE над одними и теми же таблицами, но в разном порядке.
1 процесс
A.LOCKTABLE
2 процесс
B.LOCKTABLE
1 процесс
B.LOCKTABLE - переводится в ожидание
2 процесс
A.LOCKTABLE - ожидание бесперспективно, дедлок
Такие простые дедлоки распознает сам SQL сервер.
На не все дедлоки простые, когда имеется 50 параллельных процессов, ожидания возникают регулярно, целые очереди процессов к различным таблицам. Основной причиной дедлоков является различный ПОРЯДОК установления блокировки таблиц, рекомендуется всегда воспроизводить один и тот же порядок блокировки.
Это сложно, если блокировки разбросаны по всему коду транзакции, поэтому мы видим близко к началу учетных кодюнитов (12,22,80,90,...) сгруппированные вместе операции блокировки. Но нарушения все равно есть, это просто ошибки разработчиков, которые очень непросто выявить. Присмотритесь даже к группам блокировок в 80 и 90 кодеюнитах и увидите нарушение порядка.