TX (Row Locks)
A TX enqueue is created as soon as a transaction is started. It is uniquely identified by the rollback segment number, slot number (in rollback segment’s transaction table) and slot number’s sequence number.
The wait event for this lock is normally "enq: TX - row lock contention".
A session, whilst carrying out DML on a row (or SELECT …. FOR UPDATE) can be waiting on a TX for the following main reasons:
Another session is carrying out DML on the requested row. Or has used SELECT … FOR UPDATE.
Another session has inserted the same row (defined by unique key) into the same table.
There are no free ITL (interested transaction list) slots in the block header. i.e. too many concurrent DML transactions are modifying rows in the same block. Increase INITRANS (and/or MAXTRANS) for the segment. Alternatively the number of rows in a block can be reduced by re-organizing the table; either reducing the block size or increasing the PCTFREE. The wait event for this situation is "enq: TX - allocate ITL entry".
My Oracle Support document "Waits for 'Enq: TX - ...' Type Events - Transaction (TX) Lock Example Scenarios (Document 62354.1)" explains some scenarios for TX locks, including:
Insufficient ITL slots (INITRANS) in a block
Waits due to rows being covered by the same BITMAP index fragment.
TM (Table Locks)
This lock is acquired by a transaction when using DML (or SELECT …. FOR UPDATE) or by the LOCK TABLE statement.
DML operations require table locks to reserve DML access to the table on behalf of a transaction and to prevent DDL operations that would conflict with the transaction.
The wait for this lock is "enq: TM – contention".
UL (User Lock)
These are user specified locks.
They can be requested and released using the DBMS_LOCK package procedures REQUEST and RELEASE.
The wait for this lock is "enq: UL - contention".
Reference:
Oracle E-Business Suite Performance Guide (Doc ID 1672174.1)
A TX enqueue is created as soon as a transaction is started. It is uniquely identified by the rollback segment number, slot number (in rollback segment’s transaction table) and slot number’s sequence number.
The wait event for this lock is normally "enq: TX - row lock contention".
A session, whilst carrying out DML on a row (or SELECT …. FOR UPDATE) can be waiting on a TX for the following main reasons:
Another session is carrying out DML on the requested row. Or has used SELECT … FOR UPDATE.
Another session has inserted the same row (defined by unique key) into the same table.
There are no free ITL (interested transaction list) slots in the block header. i.e. too many concurrent DML transactions are modifying rows in the same block. Increase INITRANS (and/or MAXTRANS) for the segment. Alternatively the number of rows in a block can be reduced by re-organizing the table; either reducing the block size or increasing the PCTFREE. The wait event for this situation is "enq: TX - allocate ITL entry".
My Oracle Support document "Waits for 'Enq: TX - ...' Type Events - Transaction (TX) Lock Example Scenarios (Document 62354.1)" explains some scenarios for TX locks, including:
Insufficient ITL slots (INITRANS) in a block
Waits due to rows being covered by the same BITMAP index fragment.
TM (Table Locks)
This lock is acquired by a transaction when using DML (or SELECT …. FOR UPDATE) or by the LOCK TABLE statement.
DML operations require table locks to reserve DML access to the table on behalf of a transaction and to prevent DDL operations that would conflict with the transaction.
The wait for this lock is "enq: TM – contention".
UL (User Lock)
These are user specified locks.
They can be requested and released using the DBMS_LOCK package procedures REQUEST and RELEASE.
The wait for this lock is "enq: UL - contention".
Reference:
Oracle E-Business Suite Performance Guide (Doc ID 1672174.1)