Enqueues are local locks that serialize access to various resources. This wait event indicates a wait for a lock that is held by another session (or sessions) in an incompatible mode to the requested mode. The table below lists the details of which lock modes are compatible with which.
Enqueues are usually represented in the format "TYPE-ID1-ID2" where:
"TYPE" is a 2 character text string"ID1" is a 4 byte hexadecimal number
"ID2" is a 4 byte hexadecimal number Parameters:
- P1 = Lock Type & Mode
- P2 = Lock ID1
- P3 = Lock ID2
Lock Type & Mode
The lock type and requested mode are encoded into P1 thus:
Convert P1 into hexadecimal (or use P1RAW) and extract the lock type and requested mode from this by converting the first 2 bytes of the hexadecimal number to ASCII and the second 2 bytes to a number:
Note that on UNIX, the command 'man ascii' will display the Octal, hexadecimal, and decimal ASCII character sets to help with the hex translation.
An alternative way to extract this information is to use SQL thus:
Lock ID1
- P2 represents ID1 of the enqueue name in decimal.
- P2RAW represents ID1 of the enqueue name in hexadecimal.
Lock ID2
- P3 represents ID2 of the enqueue name in decimal.
- P3RAW represents ID2 of the enqueue name in hexadecimal.
Enqueue Type | Description |
---|---|
enq: AD - allocate AU | Synchronizes accesses to a specific OSM disk AU |
enq: AD - deallocate AU | Synchronizes accesses to a specific OSM disk AU |
enq: AF - task serialization | This enqueue is used to serialize access to an advisor task |
enq: AG - contention | Synchronizes generation use of a particular workspace |
enq: AO - contention | Synchronizes access to objects and scalar variables |
enq: AS - contention | Synchronizes new service activation |
enq: AT - contention | Serializes 'alter tablespace' operations |
enq: AW - AW$ table lock | Global access synchronization to the AW$ table |
enq: AW - AW generation lock | In-use generation state for a particular workspace |
enq: AW - user access for AW | Synchronizes user accesses to a particular workspace |
enq: AW - AW state lock | Row lock synchronization for the AW$ table |
enq: BR - file shrink | Lock held to prevent file from decreasing in physical size during RMAN backup |
enq: BR - proxy-copy | Lock held to allow cleanup from backup mode during an RMAN proxy-copy backup |
enq: CF - contention | Synchronizes accesses to the controlfile |
enq: CI - contention | Coordinates cross-instance function invocations |
enq: CL - drop label | Synchronizes accesses to label cache when dropping a label |
enq: CL - compare labels | Synchronizes accesses to label cache for label comparison |
enq: CM - gate | Serialize access to instance enqueue |
enq: CM - instance | Indicate OSM disk group is mounted |
enq: CT - global space management | Lock held during change tracking space management operations that affect the entire change tracking file |
enq: CT - state | Lock held while enabling or disabling change tracking, to ensure that it is only enabled or disabled by one user at a time |
enq: CT - state change gate 2 | Lock held while enabling or disabling change tracking in RAC |
enq: CT - reading | Lock held to ensure that change tracking data remains in existence until a reader is done with it |
enq: CT - CTWR process start/stop | Lock held to ensure that only one CTWR process is started in a single instance |
enq: CT - state change gate 1 | Lock held while enabling or disabling change tracking in RAC |
enq: CT - change stream ownership | Lock held by one instance while change tracking is enabled, to guarantee access to thread-specific resources |
enq: CT - local space management | Lock held during change tracking space management operations that affect just the data for one thread |
enq: CU - contention | Recovers cursors in case of death while compiling |
enq: DB - contention | Synchronizes modification of database wide supplemental logging attributes |
enq: DD - contention | Synchronizes local accesses to ASM disk groups |
enq: DF - contention | Enqueue held by foreground or DBWR when a datafile is brought online in RAC |
enq: DG - contention | Synchronizes accesses to ASM disk groups |
enq: DL - contention | Lock to prevent index DDL during direct load |
enq: DM - contention | Enqueue held by foreground or DBWR to synchronize database mount/open with other operations |
enq: DN - contention | Serializes group number generations |
enq: DP - contention | Synchronizes access to LDAP parameters |
enq: DR - contention | Serializes the active distributed recovery operation |
enq: DS - contention | Prevents a database suspend during LMON reconfiguration |
enq: DT - contention | Serializes changing the default temporary table space and user creation |
enq: DV - contention | Synchronizes access to lower-version Diana (PL/SQL intermediate representation) |
enq: DX - contention | Serializes tightly coupled distributed transaction branches |
enq: FA - access file | Synchronizes accesses to open ASM files |
enq: FB - contention | Ensures that only one process can format data blocks in auto segment space managed tablespaces |
enq: FC - open an ACD thread | LGWR opens an ACD thread |
enq: FC - recover an ACD thread | SMON recovers an ACD thread |
enq: FD - Marker generation | Synchronization |
enq: FD - Flashback coordinator | Synchronization |
enq: FD - Tablespace flashback on/off | Synchronization |
enq: FD - Flashback on/off | Synchronization |
enq: FG - serialize ACD relocate | Only 1 process in the cluster may do ACD relocation in a disk group |
enq: FG - LGWR redo generation enq race | Resolve race condition to acquire Disk Group Redo Generation Enqueue |
enq: FG - FG redo generation enq race | Resolve race condition to acquire Disk Group Redo Generation Enqueue |
enq: FL - Flashback database log | Synchronization |
enq: FL - Flashback db command | Enqueue used to synchronize Flashback Database and deletion of flashback logs. |
enq: FM - contention | Synchronizes access to global file mapping state |
enq: FR - contention | Begin recovery of disk group |
enq: FS - contention | Enqueue used to synchronize recovery and file operations or synchronize dictionary check |
enq: FT - allow LGWR writes | Allow LGWR to generate redo in this thread |
enq: FT - disable LGWR writes | Prevent LGWR from generating redo in this thread |
enq: FU - contention | This enqueue is used to serialize the capture of the DB Feature, Usage and High Water Mark Statistics |
enq: HD - contention | Serializes accesses to ASM SGA data structures |
enq: HP - contention | Synchronizes accesses to queue pages |
enq: HQ - contention | Synchronizes the creation of new queue IDs |
enq: HV - contention | Lock used to broker the high water mark during parallel inserts |
enq: HW - contention | Lock used to broker the high water mark during parallel inserts |
enq: IA - contention | |
enq: ID - contention | Lock held to prevent other processes from performing controlfile transaction while NID is running |
enq: IL - contention | Synchronizes accesses to internal label data structures |
enq: IM - contention for blr | Serializes block recovery for IMU txn |
enq: IR - contention | Synchronizes instance recovery |
enq: IR - contention2 | Synchronizes parallel instance recovery and shutdown immediate |
enq: IS - contention | Enqueue used to synchronize instance state changes |
enq: IT - contention | Synchronizes accesses to a temp object's metadata |
enq: JD - contention | Synchronizes dates between job queue coordinator and slave processes |
enq: JI - contention | Lock held during materialized view operations (like refresh, alter) to prevent concurrent operations on the same materialized view |
enq: JQ - contention | Lock to prevent multiple instances from running a single job |
enq: JS - contention | Synchronizes accesses to the job cache |
enq: JS - coord post lock | Lock for coordinator posting |
enq: JS - global wdw lock | Lock acquired when doing wdw ddl |
enq: JS - job chain evaluate lock | Lock when job chain evaluated for steps to create |
enq: JS - q mem clnup lck | Lock obtained when cleaning up q memory |
enq: JS - slave enq get lock2 | Get run info locks before slv objget |
enq: JS - slave enq get lock1 | Slave locks exec pre to sess strt |
enq: JS - running job cnt lock3 | Lock to set running job count epost |
enq: JS - running job cnt lock2 | Lock to set running job count epre |
enq: JS - running job cnt lock | Lock to get running job count |
enq: JS - coord rcv lock | Lock when coord receives msg |
enq: JS - queue lock | Lock on internal scheduler queue |
enq: JS - job run lock - synchronize | Lock to prevent job from running elsewhere |
enq: JS - job recov lock | Lock to recover jobs running on crashed RAC inst |
enq: KK - context | Lock held by open redo thread, used by other instances to force a log switch |
enq: KM - contention | Synchronizes various Resource Manager operations |
enq: KP - contention | Synchronizes kupp process startup |
enq: KT - contention | Synchronizes accesses to the current Resource Manager plan |
enq: MD - contention | Lock held during materialized view log DDL statements |
enq: MH - contention | Lock used for recovery when setting Mail Host for AQ e-mail notifications |
enq: ML - contention | Lock used for recovery when setting Mail Port for AQ e-mail notifications |
enq: MN - contention | Synchronizes updates to the LogMiner dictionary and prevents multiple instances from preparing the same LogMiner session |
enq: MR - contention | Lock used to coordinate media recovery with other uses of datafiles |
enq: MS - contention | Lock held during materialized view refresh to setup MV log |
enq: MW - contention | This enqueue is used to serialize the calibration of the manageability schedules with the Maintenance Window |
enq: OC - contention | Synchronizes write accesses to the outline cache |
enq: OL - contention | Synchronizes accesses to a particular outline name |
enq: OQ - xsoqhiAlloc | Synchronizes access to olapi history allocation |
enq: OQ - xsoqhiClose | Synchronizes access to olapi history closing |
enq: OQ - xsoqhistrecb | Synchronizes access to olapi history globals |
enq: OQ - xsoqhiFlush | Synchronizes access to olapi history flushing |
enq: OQ - xsoq*histrecb | Synchronizes access to olapi history parameter CB |
enq: PD - contention | Prevents others from updating the same property |
enq: PE - contention | Synchronizes system parameter updates |
enq: PF - contention | Synchronizes accesses to the password file |
enq: PG - contention | Synchronizes global system parameter updates |
enq: PH - contention | Lock used for recovery when setting Proxy for AQ HTTP notifications |
enq: PI - contention | Communicates remote Parallel Execution Server Process creation status |
enq: PL - contention | Coordinates plug-in operation of transportable tablespaces |
enq: PR - contention | Synchronizes process startup |
enq: PS - contention | Parallel Execution Server Process reservation and synchronization |
enq: PT - contention | Synchronizes access to ASM PST metadata |
enq: PV - syncstart | Synchronizes slave start shutdown |
enq: PV - syncshut | Synchronizes instance shutdown_slvstart |
enq: PW - perwarm status in dbw0 | DBWR 0 holds enqueue indicating prewarmed buffers present in cache |
enq: PW - flush prewarm buffers | Direct Load needs to flush pre-warmed buffers if DBWR 0 holds enqueue |
enq: RB - contention | Serializes OSM rollback recovery operations |
enq: RF - synch: per-SGA Broker metadata | Ensures r/w atomicity of DG configuration metadata per unique SGA |
enq: RF - synchronization: critical ai | Synchronizes critical apply instance among primary instances |
enq: RF - new AI | Synchronizes selection of the new apply instance |
enq: RF - synchronization: chief | Anoints 1 instance's DMON as chief to other instances' DMONs |
enq: RF - synchronization: HC master | Anoints 1 instance's DMON as health check master |
enq: RF - synchronization: aifo master | Synchronizes apply instance failure detection and fail over operation |
enq: RF - atomicity | Ensures atomicity of log transport setup |
enq: RN - contention | Coordinates nab computations of online logs during recovery |
enq: RO - contention | Coordinates flushing of multiple objects |
enq: RO - fast object reuse | Coordinates fast object reuse |
enq: RP - contention | Enqueue held when resilvering is needed or when data block is repaired from mirror |
enq: RS - file delete | Lock held to prevent file from accessing during space reclamation |
enq: RS - persist alert level | Lock held to make alert level persistent |
enq: RS - write alert level | Lock held to write alert level |
enq: RS - read alert level | Lock held to read alert level |
enq: RS - prevent aging list update | Lock held to prevent aging list update |
enq: RS - record reuse | Lock held to prevent file from accessing while reusing circular record |
enq: RS - prevent file delete | Lock held to prevent deleting file to reclaim space |
enq: RT - contention | Thread locks held by LGWR, DBW0, and RVWR to indicate mounted or open status |
enq: SB - contention | Synchronizes Logical Standby metadata operations |
enq: SF - contention | Lock used for recovery when setting Sender for AQ e-mail notifications |
enq: SH - contention | Should seldom see this contention as this Enqueue is always acquired in no-wait mode |
enq: SI - contention | Prevents multiple streams table instantiations |
enq: SK - contention | Serialize shrink of a segment |
enq: SQ - contention | Lock to ensure that only one process can replenish the sequence cache |
enq: SR - contention | Coordinates replication / streams operations |
enq: SS - contention | Ensures that sort segments created during parallel DML operations aren't prematurely cleaned up |
enq: ST - contention | Synchronizes space management activities in dictionary-managed tablespaces |
enq: SU - contention | Serializes access to SaveUndo Segment |
enq: SW - contention | Coordinates the 'alter system suspend' operation |
enq: TA - contention | Serializes operations on undo segments and undo tablespaces |
enq: TB - SQL Tuning Base Cache Update | Synchronizes writes to the SQL Tuning Base Existence Cache |
enq: TB - SQL Tuning Base Cache Load | Synchronizes writes to the SQL Tuning Base Existence Cache |
enq: TC - contention | Lock held to guarantee uniqueness of a tablespace checkpoint |
enq: TC - contention2 | Lock of setup of a unique tablespace checkpoint in null mode |
enq: TD - KTF dump entries | KTF dumping time/scn mappings in SMON_SCN_TIME table |
enq: TE - KTF broadcast | KTF broadcasting |
enq: TF - contention | Serializes dropping of a temporary file |
enq: TL - contention | Serializes threshold log table read and update |
enq: TM - contention | Synchronizes accesses to an object |
enq: TO - contention | Synchronizes DDL and DML operations on a temp object |
enq: TQ - TM contention | TM access to the queue table |
enq: TQ - DDL contention | TM access to the queue table |
enq: TQ - INI contention | TM access to the queue table |
enq: TS - contention | Serializes accesses to temp segments |
enq: TT - contention | Serializes DDL operations on tablespaces |
enq: TW - contention | Lock held by one instance to wait for transactions on all instances to finish |
enq: TX - contention | Lock held by a transaction to allow other transactions to wait for it |
enq: TX - row lock contention | Lock held on a particular row by a transaction to prevent other transactions from modifying it |
enq: TX - allocate ITL entry | Allocating an ITL entry in order to begin a transaction |
enq: TX - index contention | Lock held on an index during a split to prevent other operations on it |
enq: UL - contention | Lock used by user applications |
enq: US - contention | Lock held to perform DDL on the undo segment |
enq: WA - contention | Lock used for recovery when setting Watermark for memory usage in AQ notifications |
enq: WF - contention | This enqueue is used to serialize the flushing of snapshots |
enq: WL - contention | Coordinates access to redo log files and archive logs |
enq: WP - contention | This enqueue handles concurrency between purging and baselines |
enq: XH - contention | Lock used for recovery when setting No Proxy Domains for AQ HTTP notifications |
enq: XR - quiesce database | Lock held during database quiesce |
enq: XR - database force logging | Lock held during database force logging mode |
enq: XY - contention | Lock used for internal testing |
Wait Time:
The actual wait time depends on the lock type. In most cases Oracle waits for up to 3 seconds or until posted that the enqueue resource is now available (whichever occurs first). When the wait event times out Oracle will check that the session holding the lock is still alive and if so wait again. Deadlock detection is also performed against deadlock sensitive locks.
Finding Blockers:
If a session is stuck waiting on an "enqueue" wait one can use V$LOCK to find the blocker/s and other waiters:
- V$LOCK.TYPE is the lock type from P1
- V$LOCK.ID1 is the lock ID1 from P2
- V$LOCK.ID2 is the lock ID2 from P3
It can often be simpler just to look at waiters in V$LOCK directly:
or to see blockers as well:
Systemwide Waits:
The count and average wait times for this wait-event can be misleading as "enqueue" waits re-arm every few seconds (see "Wait Time" above). To qualify how many waits have really occurred you need the enqueue waits statistic from V$SYSSTAT, or from the "Statistics" section of the StatsPack or Estat report.
Wait Events show enqueue time_waited=3000 total_waits=10, statistics show enqueue waits has a count of 2. This means there were 2 actual waits whose individual wait times totalled 3000 hundredths of a second (ie: 30 seconds).
To determine which enqueues are causing the most waits system-wide look at V$ENQUEUE_STAT (Oracle9i onwards only) thus:
In Oracle8i or earlier look at X$KSQST instead thus:
The above give the system wide number of waits for each lock type. Remember that it only takes one long wait to distort the average wait time figures. One can also look at:
- Sessions with high numbers of "enqueue waits" in V$SESSTAT
- Sampling of V$LOCK to find waiting / blocking sessions
The following V$sysstat statistics are related to the Enqueue waits.
- enqueue_timeouts
- enqueue_waits
- enqueue_deadlocks
- enqueue_requests
- enqueue_conversions
- enqueue_releases
We will look the most common enqueues.