In this Document
Purpose |
Scope |
Details |
Definition: |
Individual Waits: |
Systemwide Waits: |
Wait Time: |
Reducing Waits / Wait times: |
Known Bugs: |
References |
This document explains the meaning of the wait event "library cache: mutex" and gives hints on how it may be used to diagnose performance problems.
This is intended for DBAs and developers who are involved with tuning their database. An intermediate level of expertise is required.
This is a reference note for the wait event "library cache: mutex X" which includes the following subsections:
See Note 61998.1 for an introduction to Wait Events.
Parameters:
At a systemwide level, there are two views which will help diagnose this wait:
GV$MUTEX_SLEEP (or V$MUTEX_SLEEP for non-RAC)
and GV$MUTEX_SLEEP_HISTORY (or V$MUTEX_SLEEP_HISTORY for non-RAC)
These views track the instance wide usage of mutexes since instance startup. Since these views show values that are total values since startup, they are most meaningful when you obtain the difference in values during a short time interval when there was problem. The easiest way to see this information is through an AWR or statspack report in the "Mutex Sleep Summary" section.
The waiter waits very briefly before timing out. It is typical to see 100% timeouts for this wait.
The cause for waits will be very specific to a particular library cache object since mutexes are very granular now compared to the old library cache latches. Generally, excessive waits are caused by frequent pinning and unpinning of cursors or objects; this document will be updated as other causes are encountered.
Known Bugs
You can restrict the list below to issues likely to affect one of the following versions by clicking the relevant button:
NB Bug Fixed Description 17588480 12.1.0.2, 12.2.0.0 library cache mutex/shared pool latch deadlock 16232803 11.2.0.4, 12.1.0.2, 12.2.0.0 Library cache lock / mutex contention with fix 8508078 enabled 14401731 11.2.0.3.BP20, 11.2.0.4, 12.1.0.1 Cursor leak using "SET TRANSACTION" within PLSQL 16864042 11.2.0.4, 12.2.0.0 Unnecessary library cache operations for DDLs on partitions in exadata 16400122 12.2.0.0 Spikes in library cache mutex contention for SQL using SQL Plan Baseline 15858022 11.2.0.4, 12.2.0.0 Frequent invalidation of tuning objects with VPD 13810393 11.2.0.2.10, 11.2.0.2.BP20, 11.2.0.3.6, 11.2.0.3.BP15, 11.2.0.4, 12.1.0.1 Deadlock waiting for 'library cache: mutex x' while producing an ORA-4031 diagnostic dump 13720753 11.2.0.4, 12.1.0.1 Diagnosability issue - mutex wait "idn" value truncated in session wait output in tracefile 13588248 11.2.0.2.BP17, 11.2.0.3.3, 11.2.0.3.BP06, 11.2.0.4, 12.1.0.1 "library cache: mutex X" contention for objects with very many library cache locks 12976376 11.2.0.2.6, 11.2.0.2.BP16, 11.2.0.3.3, 11.2.0.3.BP05, 12.1.0.1 High VERSION_COUNT for SQL with binds, including recursive dictionary SQL - superseded 12797420 11.2.0.2.11, 11.2.0.2.BP21, 11.2.0.3.3, 11.2.0.3.BP07, 11.2.0.4, 12.1.0.1 "library cache: mutex X" waits on DB instance handle with CURSOR_SHARING 11818335 11.1.0.7.9, 11.2.0.2.2, 11.2.0.2.BP06, 11.2.0.3, 12.1.0.1 Additional support for bug 10411618 to allow dynamic Mutex wait scheme changes 11719151 11.2.0.3, 12.1.0.1 SQL Plan Management capture causes slowness 10632113 11.2.0.3, 12.1.0.1 OLS calls cause mutex contention even with low number of concurrent users 10417716 11.2.0.2.5, 11.2.0.2.BP05, 11.2.0.2.GIPSU05, 11.2.0.3, 12.1.0.1 Mutex X waits in 11G on an instance with heavy JAVA usage 10284845 11.2.0.3, 12.1.0.1 Need index on SID for X$KGLLK and X$KGLPN based views (V$OPEN_CURSOR etc..) 10284838 11.2.0.2.5, 11.2.0.2.BP13, 11.2.0.2.GIPSU05, 11.2.0.3, 12.1.0.1 Cache line contention while waiting for mutexes 10204505 11.2.0.3, 12.1.0.1 SGA autotune can cause row cache misses, library cache reloads and parsing 10086843 11.2.0.3, 12.1.0.1 Recursive SQL cursors not reused - PMON crashes instance with ORA-600 [kglLockOwnersListDelete] 9530750 11.2.0.2, 12.1.0.1 High waits for 'library cache: mutex X' for cursor Build lock 9239863 11.2.0.1.BP06, 11.2.0.2, 12.1.0.1 Excessive "library cache:mutex X" contention on hot objects 8981059 11.1.0.7.4, 11.2.0.1.2, 11.2.0.1.BP06, 11.2.0.2, 12.1.0.1 High Version Count (due to USER_BIND_PEEK_MISMATCH) with bind peeking 8860198 11.2.0.2, 12.1.0.1 "library cache:mutex X" waits using XMLType 7352775 11.2.0.2, 12.1.0.1 Many child cursors when PARALLEL_INSTANCE_GROUP set wrong 12670165 11.2.0.2.4, 11.2.0.2.BP12, 11.2.0.3 Library cache mutex contention caused by lookup of triggers 12633340 11.2.0.2.6, 11.2.0.2.BP13, 11.2.0.3 Heavy "library cache lock" and "library cache: mutex X" contention for a "$BUILD$.xx" lock 8793492 10.2.0.5, 11.2.0.1.BP07, 11.2.0.2 Mutex Waits with Resource Manager 10145558 11.1.0.7.7, 11.2.0.1.BP12, 11.2.0.2 Selects on library cache V$/X$ views cause "library cache: mutex X" waits 9398685 11.2.0.2 High "library cache: mutex X" when using Application Context 9282521 11.2.0.2 Excessive "library cache:mutex X" contention on hot objects 9140262 11.2.0.2 ORA-600 [ksliwat5] followed by cpu spike/"library cache: mutex X" Waits 9003145 11.2.0.1.BP03, 11.2.0.2 Dump (kglIsOwnerVersionable) / "library cache: mutex X" waits 7502237 11.1.0.7.7, 11.2.0.1 Unnecessary "library cache: mutex X" waits using stored Java 7307972 11.1.0.7.2, 11.2.0.1 Excessive waits on 'library cache: mutex x' 8431767 High "library cache: mutex X" when using Application Context 9312879 11.1.0.7.7, 11.2.0.1 "library cache: mutex x" waits after killing sessions / PMON slow to clean up 7648406 10.2.0.5, 11.1.0.7.4, 11.2.0.1 Child cursors not shared for "table_..." cursors (that show as "SQL Text Not Available") when NLS_LENGTH_SEMANTICS = CHAR 7155860 11.2.0.1 Spin on kgllkde causes 'library cache: mutex X' 8499043 11.1.0.7.2 SET_CONTEXT incurs unnecessary DLM overhead in RAC 5928271 11.1.0.7 Excessive waits on "library cache: mutex X" 7317117 11.2.0.1 Unnecessary "library cache: mutex X" waits on LOB operations
- '*' indicates that an alert exists for that issue.
- '+' indicates a particularly notable issue / bug.
- 'I' indicates an install issue / bug included for completeness.
- 'P' indicates a port specific bug.
- Fixed versions use "BPnn" to indicate Exadata bundle nn.
- "OERI:xxxx" may be used as shorthand for ORA-600 [xxxx].
Another important fix to keep in mind is:
bug:10411618 ADD DIFFERENT WAIT SCHEMES FOR MUTEX WAITS
There are 3 parameters to control the mutex waits, which can be set dynamically and are only allowed to be set by "alter system set"
* _mutex_spin_count (Integer) - This sets the number of times to spin before yielding/waiting.
* _mutex_wait_time (Integer) - This sets the amount of time in milli seconds to wait or the maximum amount of time to sleep for exponential backoff
* _mutex_wait_scheme (Integer) - This controls which wait scheme to use. It can be set to one of the three wait schemes described above.
o _mutex_wait_scheme = 0 - Always YIELD
o _mutex_wait_scheme = 1 & _mutex_wait_time = t - Always SLEEP for t ms
o _mutex_wait_scheme = 2 & _mutex_wait_time = t - EXP BACKOFF with maximum sleep time set to t ms.
The default in MAIN & the backports is set to exponential backoff with the maximum wait time set to 1 ms. The old default behaviour was mostly yield. So after applying the patch if we need to revert to old behaviour, _mutex_wait_scheme should be set to 0.