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

55P03: lock_not_available

PostgreSQL

의미

요청한 락을 즉시 획득하지 못했다. 보통 다른 세션이 보유한 락을 NOWAIT로 요청했거나 lock_timeout이 만료되었을 때 발생한다.

원인

SELECT ... FOR UPDATE NOWAIT 또는 LOCK TABLE ... NOWAIT 사용 중 행/테이블이 잠겨 있음, 또는 lock_timeout 만료. 대부분의 경우 긴 트랜잭션이 락을 보유하고 있다.

해결 방법

블로킹 세션을 찾는다: pg_locks와 pg_stat_activity를 조인한다(대기/블로킹 관계). 긴 트랜잭션을 완료하거나 필요하면 pg_terminate_backend(pid)로 종료한다. NOWAIT 대신 적절한 lock_timeout으로 대기하고 재시도 로직을 추가한다. 트랜잭션을 짧게 해 락 보유 시간을 줄인다.

DBAtlas에서 열기 →

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