enq: TX - row lock contention: 대기: 다른 트랜잭션이 보유한 행 수준 락에 세션이 블로킹됨
Oracle의미
세션이 다른 트랜잭션이 보유한 행 락의 해제를 기다리고 있다. 전형적인 애플리케이션 수준 락 대기 이벤트이다.
원인
같은 행을 갱신하려는 동시 트랜잭션, 오랫동안 커밋되지 않은 트랜잭션, 인덱스 없는 외래 키로 인한 광범위한 락, 또는 순차 키에 대한 집중(hot block).
해결 방법
블로킹 세션과 블로킹된 세션을 찾는다: SELECT * FROM v$session WHERE blocking_session IS NOT NULL; v$lock과 대조한다. 긴 트랜잭션이 근본 원인이라면 커밋 전략을 검토한다. 외래 키 컬럼에 인덱스를 생성한다. hot row에 대해서는 설계(sequence, hash)를 재검토한다. 필요하면 블로킹 세션을 종료한다.
같은 데이터베이스의 다른 항목
- ORA-01578Oracle data block corrupted (file #, block #)
- ORA-01722Invalid number
- ORA-02049Timeout: distributed transaction waiting for lock
- log file sync대기: 커밋 시 LGWR이 redo를 디스크에 플러시하기를 세션이 기다림
- db file sequential read대기: 단일 블록 물리 읽기, 보통 인덱스 또는 테이블 조회
- db file scattered read대기: 다중 블록 물리 읽기, 보통 full table scan 또는 index fast full scan
- buffer busy waits대기: 다른 세션이 이미 읽거나 수정 중인 버퍼에 대한 경합