You are on page 1of 2

enq TX - Row Lock Contention Error

1 de 2

http://www.dba-oracle.com/t_enq_tx_row_lock_contention.htm

enq: TX - Row Lock Contention Error


Oracle Tips by Burleson Consulting
May 27, 2011

Question: I am getting the following wait event:


enq: TX - row lock contention

I do not understand the reason for this event.


How do I diagnose the "enq: TX - row lock contention" event?
Answer: The enq: TX - row lock contention event often indicates an
application level locking problem. The TX enqueue is the transaction enqueue
(a.k.a. enq: TX contention) and can also be related to buffer busy waits, in
conditions where multiple transaction attempt to update the same data blocks. TX
enqueue is issued when a transaction makes its first change, and released when the
transaction performs a COMMIT or ROLLBACK.
The wait event "enq: TX - row lock contention" corresponds to several situations
of TX enqueue. Waits for TX in mode 6 occur when a session is waiting for a row
level lock that is already held by another session. This occurs when one
application is updating or deleting a row that another session is also trying to
update or delete. This will generate a wait event "enq: TX - row lock contention".
To solve this particular instance, the session holding the lock must perform a
COMMIT or ROLLBACK.
In mode 4, a TX wait can occur if there is a potential duplicate in a unique index.
When two sessions try to insert the same key value the second session must wait
to see if an ORA-001 should be raised. This can cause the "enq: TX - row lock
contention" wait event. This wait event can be handled by having the session
holding the lock perform a COMMIT or ROLLBACK.
The wait event enq: TX row lock contention can also occur in mode 4 when a
session is waiting on a shared bitmap index fragment. Bitmap indexes index key
values and a range of ROWIDs. Each entry in a bitmap index can cover many
rows in the actual table. If two sessions want to update rows covered by the same
index fragment, then the second session must wait for the first session to perform
either a COMMIT or a ROLLBACK by waiting for the TX lock in mode 4,
otherwise it will generate the enq: TX row lock contention wait event.
To troubleshoot the wait event enq: TX row lock contention, use the following
SQL:
For which SQL is currently waiting on:
select
sid,
sql_text
from
v$session s,
v$sql q
where
sid in
(select
sid
from
v$session
where
state in ('WAITING')
and
wait_class != 'Idle'
and
event='enq: TX - row lock contention'
and
(q.sql_id = s.sql_id or q.sql_id = s.prev_sql_id));

The blocking session is:


select
blocking_session,
sid,
serial#,
wait_class,
seconds_in_wait
from
v$session
where
blocking_session is not NULL

12/10/2015 11:01

enq TX - Row Lock Contention Error

2 de 2

http://www.dba-oracle.com/t_enq_tx_row_lock_contention.htm

seconds_in_wait
from
v$session
where
blocking_session is not NULL
order by
blocking_session;

Get the Complete


Oracle SQL Tuning Information
The landmark book "Advanced Oracle SQL Tuning
The Definitive Reference" is filled with valuable
information on Oracle SQL Tuning. This book includes
scripts and tools to hypercharge Oracle 11g
performance and you can buy it for 30% off directly
from the publisher.

12/10/2015 11:01

You might also like