enq: TX - row lock contention: 待機: 別トランザクションが保持する行レベルロックでセッションがブロックされている
Oracle意味
セッションが、別トランザクションの保持する行ロックの解放を待っている。アプリケーションレベルの典型的なロック待機イベント。
原因
同じ行を更新しようとする同時トランザクション、長時間コミットされないトランザクション、インデックスのない外部キーによる広範なロック、または連番キーへの集中 (ホットブロック)。
対処方法
ブロッキングセッションとブロックされているセッションを特定する: SELECT * FROM v$session WHERE blocking_session IS NOT NULL; さらに v$lock と突き合わせる。長いトランザクションが根本原因ならコミット戦略を見直す。外部キー列にインデックスを作成する。ホット行は設計 (順序、ハッシュ) を再検討する。必要に応じてブロッキングセッションを終了させる。
同じデータベースの他の項目
- ORA-01578Oracle data block corrupted (file #, block #)(Oracle データブロックの破損)
- ORA-01722Invalid number(数値が無効)
- ORA-02049Timeout: distributed transaction waiting for lock(分散トランザクションのロック待機タイムアウト)
- log file sync待機: コミット時に LGWR が redo をディスクにフラッシュするのをセッションが待っている
- db file sequential read待機: 単一ブロックの物理読み取り。通常はインデックスまたはテーブルの参照
- db file scattered read待機: マルチブロックの物理読み取り。通常は全表スキャンまたはインデックス高速全スキャン
- buffer busy waits待機: 別セッションが読み取り中または変更中のバッファをめぐる競合