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 で開く →

同じデータベースの他の項目