← Sessions & Locks
Oracle · Sessions & Locks

How to check row lock contention in Oracle

Show Oracle sessions waiting on enq: TX - row lock contention and the object, waiter, and blocker involved.

Tested on11g12c18c19c21c23ai26ai

Sessions on ''enq: TX - row lock contention'' are blocked at the row level — usually a long transaction or an app leaving a row locked. This pairs the waiter with its blocker, the SQL, and the affected object.

SELECT w.sid  AS waiter_sid,  w.serial# AS waiter_serial,  w.username AS waiter_user,
       w.event, w.seconds_in_wait,
       w.row_wait_obj#,
       (SELECT owner || '.' || object_name
        FROM   dba_objects
        WHERE  object_id = w.row_wait_obj#) AS waiting_on_object,
       w.sql_id AS waiter_sql,
       b.sid  AS blocker_sid, b.serial# AS blocker_serial, b.username AS blocker_user,
       b.sql_id AS blocker_sql
FROM   v$session w
JOIN   v$session b ON b.sid = w.blocking_session
WHERE  w.event LIKE 'enq: TX%row lock contention%'
ORDER BY w.seconds_in_wait DESC;
lockstx enqueuerow lock