DBAtlas · データベース運用アトラス

40P01: deadlock_detected

PostgreSQL

意味

2 つ以上のトランザクションが互いに相手の保持するロックを待ち、デッドロックに陥った。PostgreSQL はこの循環を検出し、いずれかのトランザクションを取り消す。

原因

異なる順序でのロック取得、同じ行の交差更新、長いトランザクション、または外部キーチェック中に取得される競合ロック。

対処方法

サーバーログのデッドロック詳細に競合したクエリが示される。すべてのトランザクションで同じ順序でテーブル/行にアクセスする。トランザクションを短く保つ。取り消されたトランザクションをアプリケーションで捕捉して再試行する。pg_locks と pg_stat_activity を結合してロックを調べる。必要なら SELECT ... FOR UPDATE でロック順序を明示する。

DBAtlas で開く →

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