DBAtlas · 데이터베이스 운영 아틀라스

ORA-00060: Deadlock detected while waiting for resource

Oracle

의미

둘 이상의 세션이 서로가 보유한 리소스를 기다리며 데드락 상태에 빠졌다. Oracle은 순환을 감지해 희생자를 선택하고 해당 세션의 문장을 롤백한다.

원인

서로 다른 순서로 획득한 행 락, 서로 다른 트랜잭션이 같은 행을 교차로 갱신, 인덱스 없는 외래 키로 인해 부모 테이블 갱신 시 걸리는 테이블 락, 또는 bitmap 인덱스에 대한 동시 DML.

해결 방법

alert log에 기록된 데드락 트레이스(graph) 파일을 검토해 충돌하는 SQL 문과 행을 찾는다. 애플리케이션에서는 항상 같은 순서로 테이블/행에 접근한다. 외래 키 컬럼에 인덱스를 생성한다(인덱스 없는 FK는 대표적인 데드락 원인이다). 트랜잭션을 짧게 유지하고 커밋 빈도를 검토한다. 데드락이 발생한 트랜잭션은 애플리케이션에서 잡아 재시도한다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목