Skip to content
pvmehta.com

pvmehta.com

  • Home
  • About Me
  • Toggle search form
  • How to change hostname in Linux Linux/Unix
  • crtgr.sql /* For creating trigger from data dictionary */ Oracle
  • Database link password in user_db_links Oracle
  • sess_server.sql Oracle
  • findx.sql /* Find Indexes on specified USER.TABLE_NAME */ Oracle
  • database trigger failing Oracle
  • Specify the Rollback segment to use in Transaction Oracle
  • Exadata Basics Oracle
  • SQL Tracker by SID sqltrackerbysid.sql Oracle
  • fuser to check who is using diretory Linux/Unix
  • catting.sh Linux/Unix
  • How to specify 2 arch location to avoid any kind of DB hanging. Oracle
  • Adding Datafile on Primary Server and Impact on Standby Server Oracle
  • How To Resolve Stranded DBA_2PC_PENDING Entries ID 401302.1 (Very Good prooven) Oracle
  • currwaitobj.sql SQl_ID and SQL statement you can get from currwaitobj.sql Oracle

mutex in Oracle 10.2.0.2 or Oracle 10g

Posted on 13-Sep-2006 By Admin No Comments on mutex in Oracle 10.2.0.2 or Oracle 10g

#########

# _kks_use_mutex_pin

#

# Enables use of more efficient mutex mechanism for

# implementing library cache pins.

#

#########

_kks_use_mutex_pin=TRUE

Apparently, Oracle is migrating some of its serialization protection from latches to mutexes. For example, the structures previously protected by the Library Cache Pin latch are now protected by a mutex and evidenced by the cursor:pin S wait event. Actually there are several new mutexes and mutex related wait events new to 10g. For example:

– cursor:mutex indicates mutex waits on parent cursor operations and statistic block operations.

– cursor:pin events are waits for cursor pin operations (library cache pin now protected by mutex).

There are a couple interesting facts about Oracle and mutexes. A mutex get is about 30-35 instructions, compared to 150-200 instructions for a latch get. Also, a mutex is around 16 bytes in size, compared to 112 bytes for a latch in Release 10.2 (in prior releases, it was 200 bytes).

One of the appeals of the mutex, per the documentation, is the reduced potential for false contention. That is, a mutex can protect a single structure; often times stored with the structure it protects. However, latches often protect many structures (see cache buffers chain latch) and can yield what the documentation calls false contention. It is called false contention because “the contention is for the protection mechanism rather than the target object you are attempting to access.” This all sounds really great, right? Well, maybe. If Oracle goes to more widespread use of mutexes instead of latches to protect target objects that would be a boatload more mutexes. I am sure the porters at Oracle are not intending to use mutexes exclusively in the future. But, I can see where contention in Oracle could be dramatically reduced at the cost of CPU cycles and memory. What would happen if Oracle protected each buffer with a mutex? While each mutex is less expensive with regard to memory and CPU than an individual latch, you will need considerably more mutexes for each replaced latch. 50 mutexes used to replace a single latch could run the CPU up considerably for the “same” application workload.

I have one final note on mutexes. As of version 10.2.0.2 a SELECT against V$SQLSTAT and searches of child cursor lists are mutex protected.

I found the Tuning the Buffer Cache discussion somewhat interesting. Unless you have been hiding under a rock the past 4-5 years, I am sure you have heard the Oracle experts preaching the notion that ratios are not very helpful in diagnosing the health of a database. In particular, the buffer cache hit ratio is frequently tagged as meaningless. A smile came to my face when I read the following excerpt from the course material:

“A badly tuned database can still have a hit ratio of 99% or better…hit ratio is only one part in determining tuning performance…hit ratio does not determine whether a database is optimally tuned…”

Oracle is finally teaching what the experts have been saying for years!

I have been to several Hotsos events/training classes. They often talk about the need to include the buffer is pinned count statistic in the tally for logical reads. These operations are simply latch-reduced logical reads. Why doesn’t Oracle integrate this information into their course material or documentation set? They still only claim that db block gets and consistent gets constitute logical reads. I monitored a process recently in one of my production environments and noticed the process did 2 buffer is pinned count logical reads for every 1 (db block gets + consistent gets). That is a substantial percentage of work owed to operations not officially categorized as a measure of work by Oracle.

Lastly, the on-topic impromptu discussions were fruitful. That always makes the training session more interesting 🙂

10.2.0.2 defaults the use of mutexes for certain shared cursor operations, instead of library cache latches and library cache pin latches and library cache pins. Mutexes use the CAS (compare and swap) operation. . On platforms which do not support CAS, the Mutex code simulates the mutex operation using a pool of latches (called ‘Mutex’). Mutex latches are only used on platforms where CAS (compare-and-swap) operations are not supported (I believe the only platform that CAS is not supported is PA-RISC). . Disabling mutexes reduced CPU usage by 10%-15% (the values were derived looking at the average of the Current CPU values of the Glance output for a mutex and non-mutex run).

Oracle, SQL scripts

Post navigation

Previous Post: tuning commmand for cpu, ip and memory stats
Next Post: Vivek’s egrep commands to trace problem. (on linux x86-64)

Related Posts

  • sess_server.sql Oracle
  • oracle 11g RAC on vmware Oracle
  • Privilege to describe the table. Oracle
  • currwaitobj.sql SQl_ID and SQL statement you can get from currwaitobj.sql Oracle
  • Sequence Resetting Oracle
  • sesswait.sql Oracle

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Categories

  • Ansible (0)
  • AWS (2)
  • Azure (1)
  • Django (0)
  • GIT (1)
  • Linux/Unix (149)
  • MYSQL (5)
  • Oracle (402)
  • PHP/MYSQL/Wordpress (10)
  • POSTGRESQL (1)
  • Power-BI (0)
  • Python/PySpark (7)
  • RAC (18)
  • rman-dataguard (26)
  • shell (150)
  • SQL scripts (350)
  • SQL Server (6)
  • Uncategorized (5)
  • Videos (0)

Recent Posts

  • SAT Mathematics 10 questions and answer at the end.30-Apr-2026
  • top 10 AI news today30-Apr-2026
  • runon_allpdbs_show_conname.sh23-Apr-2026
  • runon_allcdbs_find_pdbs.sql23-Apr-2026
  • Running PDB on single node in RAC09-Apr-2026
  • find_arc.sql09-Apr-2026
  • pvm_pre_change.sql08-Apr-2026
  • find_encr_wallet.sql08-Apr-2026
  • find_pdbs.sql08-Apr-2026
  • Creating a Container Database using dbaascli08-Apr-2026

Archives

  • 2026
  • 2025
  • 2024
  • 2023
  • 2010
  • 2009
  • 2008
  • 2007
  • 2006
  • 2005
  • 272332.1 CRS 10g Diagnostic Collection Guide Oracle
  • catall.sh Linux/Unix
  • MYSQL for Oracle DBA MYSQL
  • Handling LOB data in Oracle Oracle
  • lck.sql Oracle
  • ORA-00064: object is too large to allocate on this O/S during startup Oracle
  • Create type and Grant on it. Oracle
  • DBMS_PROFILER for tuning PLSQL programs. Oracle

Copyright © 2026 pvmehta.com.

Powered by PressBook News WordPress theme