Skip to content

“enq: UL – contention wait event” in Oracle database

We have seen  “enq: UL – contention” wait event a couple of times in our Oracle Database. It occurs when there is contention for an undo segment header, which is a shared resource used by multiple transactions. This can lead to performance issues and slow down the entire system.

Some possible steps that can be taken to fix this wait event are:

1. Monitor undo usage: The first step in addressing the enq: UL – contention wait event is to monitor undo usage. You can use the V$UNDOSTAT view to monitor undo usage, which provides information on the amount of undo generated, the amount of undo used, and the amount of undo space available. By monitoring undo usage, you can determine if undo segments are becoming full and causing contention. Also, you can generate AWR during that time and see the undo consumption

2. Increase undo tablespace size:  If the undo tablespace is full or nearly full, you will need to add more space to it. You can do this by adding another datafile to the undo tablespace or by increasing the size of an existing datafile.

3. Tune SQL statements: This is one of the common error. High undo usage can often be caused by poorly tuned SQL statements. By analyzing the SQL statements that are causing the high undo usage, you can determine if they can be optimized. For example, you can check if the SQL statements are using appropriate indexes, if the table statistics are up-to-date, or if the SQL statements can be re-written to reduce the amount of undo operations.

4. Check for long-running transactions: Long-running transactions can cause undo segments to fill up quickly, leading to contention. You can check for long-running transactions by querying the V$TRANSACTION view. If you find any long-running transactions, you can terminate them to release undo space.

5. Use Automatic Undo Management (AUM): Automatic Undo Management (AUM) is a feature of Oracle Database that automatically manages undo segments. AUM can help reduce contention by creating new undo segments when existing ones become full. Most new oracle database versions already use it but still you can verify.

6. Check for blocking sessions: If you see blocking sessions, it can cause undo contention. You can check for blocking sessions by querying the V$SESSION_WAIT view. If you find any blocking sessions, you can terminate them to release undo space.

In our case, we have seen that bad SQLs are usually causing this wait event. Although, at few times w ha to increase undo tablespace to counter this issue.

Brijesh Gogia
Leave a Reply