Re: Fun with WAIT Event "library cache: mutex X"

From: Gaja Krishna Vaidyanatha <>
Date: Thu, 8 Dec 2011 10:24:37 -0800 (PST)
Message-ID: <>

Hi Chris,
Just curious - are you using automatic SGA memory management? 

In my humble experience, I have seen the mutex waits that you refer to when resize operations happen at bad times (basically stealing away from the shared pool to give to the database buffer cache more memory because of a spurt of high I/O requests). In those cases, I have actually turned off automatic SGA memory management in exchange of stability and consistency. Not to mention the problem just goes away. I am big believer in automating the appropriate components in my database (thank you Oracle for automating among other components - UNDO :) ).

But, I am still old school when it comes to buffer cache sizing, shared pool & other pools sizing. I believe it should be part of a DBA's job and should be automated ONLY in applications/databases that demonstrate consistent, predictable and static behavior in workloads. For more dynamic and inconsistent workloads, I personally would go with manual memory settings. It is worthwhile incurring the additional cost of allocating more memory for the required structures and gain stability and consistency in return. Plus, the CPU overhead of MMAN (if and where relevant) can be avoided.



Gaja Krishna Vaidyanatha,
CEO & Founder, DBPerfMan LLC

Phone - +1-650-743-6060 Insights:Tales of the Oak Table - Co-author:Oracle Performance Tuning 101 -

 From: "Taylor, Chris David" <> To: "''" <> Sent: Thursday, December 8, 2011 8:45 AM Subject: Fun with WAIT Event "library cache: mutex X"  

I'm running Patch 10 on Windows x64 and I have a pl/sql procedure that is rather simple, but kept erroring out after some time with an out memory condition. So, I decided to look and see what it is doing and it is encountering the "library cache: mutex X" event.

Browing Oracle Support, I found the note about it and it says:

*  "P3 = "where" = location in code (internal identifier) where mutex is being waited for _at_The meaning of the code for "where" can be found by looking in kgl0.h for entries with the prefix ""kglml_XXX".  For example, if P3=2, then it corresponds to "kglml_kglget2".  You can then search source code for this symbol to see where the mutex is acquired.

Well, that's not very helpful to me since I don't have access to the source code :)  I understand that the engineers can use it.

Long story short, I decided to download the patchset.

It is only *4 GIGABYTES*.  I'm getting about 170k download speed on my work network so......

Chris Taylor
Sr. Oracle DBA
Ingram Barge Company
Nashville, TN 37205

"Quality is never an accident; it is always the result of intelligent effort."
-- John Ruskin (English Writer 1819-1900)

CONFIDENTIALITY NOTICE: This e-mail and any attachments are confidential and may also be privileged. If you are not the named recipient, please notify the sender immediately and delete the contents of this message without disclosing the contents to anyone, using them for any purpose, or storing or copying the information on any medium.


-- Received on Thu Dec 08 2011 - 12:24:37 CST

Original text of this message