DBAtlas · Атлас эксплуатации баз данных

ORA-00060: Обнаружена взаимоблокировка при ожидании ресурса

Oracle

Что это значит?

Две или более сессии оказались во взаимоблокировке, каждая ждёт ресурс, удерживаемый другой. Oracle обнаруживает цикл, выбирает жертву и откатывает оператор этой сессии.

Почему возникает?

Захват блокировок строк в разном порядке, перекрёстное обновление одних и тех же строк разными транзакциями, блокировки таблицы при обновлении родительской таблицы из-за неиндексированных внешних ключей или параллельный DML над bitmap-индексом.

Как исправить

Изучите trace-файл взаимоблокировки (граф), на который ссылается alert log, чтобы найти конфликтующие SQL-операторы и строки. В приложении всегда обращайтесь к таблицам/строкам в одном и том же порядке. Индексируйте столбцы внешних ключей (неиндексированные FK — классическая причина взаимоблокировок). Делайте транзакции короткими и пересмотрите частоту commit. Перехватывайте в приложении транзакцию, попавшую во взаимоблокировку, и повторяйте её.

Открыть в DBAtlas →

Ещё по этой СУБД