Latch and Mutex Contention Troubleshooting in Oracle. Tanel Põder http://blog.tanelpoder.com



Similar documents
TUTORIAL WHITE PAPER. Application Performance Management. Investigating Oracle Wait Events With VERITAS Instance Watch

Oracle Database In- Memory Op4on in Ac4on

1Z0-117 Oracle Database 11g Release 2: SQL Tuning. Oracle

MyOra 3.0. User Guide. SQL Tool for Oracle. Jayam Systems, LLC

Keep It Simple - Common, Overlooked Performance Tuning Tips. Paul Jackson Hotsos

Understanding LGWR, Log File SyncWaits and Commit Performance

Module 15: Monitoring

Oracle Database 11g: Performance Tuning DBA Release 2

MyOra 3.5. User Guide. SQL Tool for Oracle. Kris Murthy

Expert Oracle Exadata

Oracle Database 11 g Performance Tuning. Recipes. Sam R. Alapati Darl Kuhn Bill Padfield. Apress*

Oracle EXAM - 1Z Oracle Database 11g Release 2: SQL Tuning. Buy Full Product.

Tuning Exadata. But Why?

Transaction Performance Maximizer InterMax

Basic Tuning Tools Monitoring tools overview Enterprise Manager V$ Views, Statistics and Metrics Wait Events

Oracle Enterprise Manager 12c New Capabilities for the DBA. Charlie Garry, Director, Product Management Oracle Server Technologies

Delivering Oracle Success. Automatic SQL Tuning in Oracle Database 10g and 11g. Lucy Feng. RMOUG Training Days February 15-17, 2011

1. This lesson introduces the Performance Tuning course objectives and agenda

Oracle Database 12c: Performance Management and Tuning NEW

Oracle Database 11g: SQL Tuning Workshop

Oracle Database 12c: Performance Management and Tuning NEW

Oracle server: An Oracle server includes an Oracle Instance and an Oracle database.

Technical Paper Yet Another Performance Profiling Method (Or YAPP-Method)

Programa de Actualización Profesional ACTI Oracle Database 11g: SQL Tuning Workshop

Drilling Deep Into Exadata Performance With ASH, SQL Monitoring and Exadata Snapper

Proactive database performance management

Oracle Database 10g. Page # The Self-Managing Database. Agenda. Benoit Dageville Oracle Corporation benoit.dageville@oracle.com

- An Oracle9i RAC Solution

Objectif. Participant. Prérequis. Pédagogie. Oracle Database 11g - Performance Tuning DBA Release 2. 5 Jours [35 Heures]

Topics Advanced PL/SQL, Integration with PROIV SuperLayer and use within Glovia

Oracle Database 11g: SQL Tuning Workshop Release 2

Expert Oracle Exadata

Oracle 10g Performance Case Studies

DBA Best Practices: A Primer on Managing Oracle Databases. Leng Leng Tan Vice President, Systems and Applications Management

Oracle. Brief Course Content This course can be done in modular form as per the detail below. ORA-1 Oracle Database 10g: SQL 4 Weeks 4000/-

DBACockpit for Oracle. Dr. Ralf Hackmann SAP AG - CoE EMEA Tech Appl. Platf. DOAG St. Leon-Rot 02. July 2013

AWS Schema Conversion Tool. User Guide Version 1.0

Oracle DBA Course Contents

MyOra 4.5. User Guide. SQL Tool for Oracle. Kris Murthy

Monitoring PostgreSQL database with Verax NMS

SQL Tuning Proven Methodologies

Who am I? Copyright 2014, Oracle and/or its affiliates. All rights reserved. 3

Figure 1: Main OAM Login Screen

Performance Tuning and Optimizing SQL Databases 2016

The Sins of SQL Programming that send the DB to Upgrade Purgatory Abel Macias. 1 Copyright 2011, Oracle and/or its affiliates. All rights reserved.

OLH: Oracle Loader for Hadoop OSCH: Oracle SQL Connector for Hadoop Distributed File System (HDFS)

Virtual Private Database Features in Oracle 10g.

Listening In. Passive Capture and Analysis of Oracle Network Traffic. Jonah H. Harris myyearbook.com

Oracle Database 12c: SQL Tuning for Developers. Sobre o curso. Destinatários. Oracle - Linguagens. Nível: Avançado Duração: 18h

Maximizing Performance for Oracle Database 12c using Oracle Enterprise Manager

Upgrading to Oracle 11g

Tips & Best Practices

SQL Server Performance Tuning and Optimization

B&K Precision 1785B, 1786B, 1787B, 1788 Power supply Python Library

Oracle Architecture. Overview

Managing Database Performance. Copyright 2009, Oracle. All rights reserved.

JBoss & Infinispan open source data grids for the cloud era

PERFORMANCE TUNING ORACLE RAC ON LINUX

EMC Unisphere for VMAX Database Storage Analyzer

COSC 6397 Big Data Analytics. 2 nd homework assignment Pig and Hive. Edgar Gabriel Spring 2015

Storing SpamAssassin User Data in a SQL Database Michael Parker. [ Start Slide ] Welcome, thanks for coming out today.

OLTP Meets Bigdata, Challenges, Options, and Future Saibabu Devabhaktuni

ORACLE INSTANCE ARCHITECTURE

Oracle 11g Database Administration

SQL. Short introduction

<Insert Picture Here> Designing and Developing Highly Scalable Applications with the Oracle Database

Execution Plans: The Secret to Query Tuning Success. MagicPASS January 2015

Introduction. Part I: Finding Bottlenecks when Something s Wrong. Chapter 1: Performance Tuning 3

Oracle Performance Management A Radical Approach

Advanced Oracle SQL Tuning

A basic create statement for a simple student table would look like the following.

An Oracle White Paper February, Oracle Database In-Memory Advisor Best Practices

Microsoft SQL Server: MS Performance Tuning and Optimization Digital

In This Lecture. Security and Integrity. Database Security. DBMS Security Support. Privileges in SQL. Permissions and Privilege.

Experiment 5.1 How to measure performance of database applications?

Section 11.1, Simple Network Management Protocol. Section 11.2, Port Data Capture

ABAP How To on SQL Trace Analysis

About the Author About the Technical Contributors About the Technical Reviewers Acknowledgments. How to Use This Book

Writing SQL. PegaRULES Process Commander

Jive Connects for Openfire

SQL Activity Runaway sessions Session information. SQL Activity Concurrent Request runaways. Database sessions Concurrent Requests

2013 OTM SIG CONFERENCE Performance Tuning/Monitoring

Lessons Learned while Pushing the Limits of SecureFile LOBs. by Jacco H. Landlust. zondag 3 maart 13

Performance and Tuning Guide. SAP Sybase IQ 16.0

Oracle Database 12c: Administration Workshop NEW

Response Time Analysis

Most Common Database Configuration Mistakes Jože Senegačnik, Oracle ACE Director, Member of OakTable DbProf d.o.o. Ljubljana, Slovenia

3.GETTING STARTED WITH ORACLE8i

Query Performance Tuning: Start to Finish. Grant Fritchey

Benchmark and Performance Analysis. of a. Large Centralized Tax Processing Solution

Extending Your Use of Extended Events

To install Multifront you need to have familiarity with Internet Information Services (IIS), Microsoft.NET Framework and SQL Server 2008.

SQL Programming. CS145 Lecture Notes #10. Motivation. Oracle PL/SQL. Basics. Example schema:

Teradata Utilities Class Outline

3 Setting up Databases on a Microsoft SQL 7.0 Server

Real Life RAC Performance Tuning. Arup Nanda Lead DBA Starwood Hotels

Transcription:

Latch and Mutex Contention Troubleshooting in Oracle Tanel Põder http://blog.tanelpoder.com

If you like this session......then you're probably an Oracle geek like me ;) And you will like my tech-blog: http://blog.tanelpoder.com All my scripts freely downloadable http://blog.tanelpoder.com/seminar/seminar-files/ Look for TPT scripts Oh... and I do seminars with much more stuff like this ;-) And I also fix these kinds of problems as a consultant http://blog.tanelpoder.com/seminar/ tanel@tanelpoder.com Tanel Põder http://www.tanelpoder.com 2

What is a latch? Intro to latching - 1 Oracle's low-level mechanism for serializing concurrent access to very shortly accessed memory structures such as cache buffer headers etc... Blah blah blah! Yeah, but what is a latch? Latch is just a simple memory structure Usually around 100-200B in size (dependent on version,platform) Is wrapped into a latch state object structure (since v8.0 I think) Can reside in fixed SGA (parent latches) or shared pool Is set using hardware-atomic compare-and-swap (CAS) instructions LOCK CMPXCHG on intel Latches are taken and released without any OS interaction Actually the OS doesn't even have a clue that Oracle latches exist! Can be shared (since Oracle 8.0) Used for some AQ ops For example, used for cache buffers chains latch gets if examining a buffer chain Tanel Põder http://www.tanelpoder.com 3

The real intro to latching Latch is a lock period. Tanel Põder http://www.tanelpoder.com 4

Latch contention What is latch contention? I want to get a latch... but someone is already holding it! To troubleshoot, find out: 1) Who and why tries to get the latch (waiter) 2) Who and why are holding the latch (blocker) In other words - find who and why is blocking us! Just like with regular enqueue locks... Remember, latches are locks! Tanel Põder http://www.tanelpoder.com 5

Latch contention troubleshooting V$SESSION_WAIT / V$ACTIVE_SESSION_HISTORY PARAMETER1 = latch address for any latch wait event sw, WaitProf to see latch addresses of latch wait events Addresses map to v$latch_parent/v$latch_children.addr column SQL Trace you need to convert the P1/address number to hex: WAIT #3: nam='latch free' ela= 3749 address=15709454624 number=202 tries=1 obj#=-1 tim=5650189627 SQL> select to_char(15709454624, 'XXXXXXXXXXXXXXXX') addr_hex from dual; ADDR_HEX ----------------- 3A85B4120 SQL> @la 3A85B4120 ADDR LATCH# CHLD NAME GETS ---------------- ---------- ------ --------------- ---------- 00000003A85B4120 202 2 kks stats 494562 Tanel Põder http://www.tanelpoder.com 6

V$LATCHHOLDER Identifying latch holders Shows top-level latch holders from process state objects See the Session ID of latch holder!!! Any latch held by a process state object is shown there Works in 99.9% of cases - enough for practical troubleshooting Additional latches held (while the top-level one is held) are not reported by v$latchholder :-( In the 0.01% of cases a fallback to old latch contention troubleshooting method could be used Alternatively its possible to traverse state object trees via direct SGA attach SQL> desc v$latchholder Name Null? Type ------------------------------- -------- ------------ 1 PID NUMBER 2 SID NUMBER 3 LADDR RAW(8) 4 NAME VARCHAR2(64) 5 GETS NUMBER Tanel Põder http://www.tanelpoder.com 7

Latch contention troubleshooting approach 1. Identify the session(s) experiencing problems Remember, databases don't have problems, only users, through database sessions 2. Quantify for which latch that session is waiting for the most...and whether the wait time is significant enough 3. Identify the child latch involved in contention Is the contention concentrated on a particular child latch or is it spread across many? 4. Identify where in kernel code (why) the latch is held from V$LATCHHOLDER LatchProfX / X$KSUPRLAT / X$KSUPR if problem with some sessions Tanel Põder http://www.tanelpoder.com 8

Latch contention troubleshooting with LatchProfX Sample V$LATCHHOLDER stats with LatchProfX, fast 10-100k samples per second! @latchprofx <columns> <sid> <latches> <#samples> @latchprofx sid,name,func,hmode % % 1000000 SQL> @latchprofx sid,name,func,hmode &sid % 100000 -- LatchProfX 1.07 by Tanel Poder ( http://www.tanelpoder.com ) SID NAME FUNC HMODE Held ---------- ----------------------------------- ---------------------------------------- ------------ ---------- 139 shared pool kghalo exclusive 3174 139 shared pool kghalp exclusive 1294 139 shared pool kghupr1 exclusive 704 139 shared pool simulator kglsim_unpin_simhp exclusive 581 139 kks stats kksallocchildstat exclusive 489 139 shared pool simulator kglsim_upd_newhp exclusive 240 139 row cache objects kqrpre: find obj exclusive 158 139 enqueues ksqdel exclusive 116 139 enqueues ksqgel: create enqueue exclusive 91 139 shared pool kgh_heap_sizes exclusive 90 139 row cache objects kqreqd: reget exclusive 58 139 enqueue hash chains ksqgtl3 exclusive 57 139 shared pool simulator kglsim_scan_lru: scan exclusive 53 139 shared pool kghfre exclusive 49 139 row cache objects kqreqd exclusive 41 139 enqueue hash chains ksqrcl exclusive 36 139 shared pool simulator kglsim_chg_simhp_free exclusive 22 139 shared pool kghasp exclusive 18 139 MinActiveScn Latch ktuclogetglobalminscn shared 14 Tanel Põder http://www.tanelpoder.com 9

KGX mutexes KGX = Kernel Generic mutex module Kernel functions managing mutexes start with kgx Introduced in Oracle 10.2 Physically like a latch (a piece of memory) only more lightweight and smaller Can be embedded inside other structures (lib cache object handle) Can have flexible spin/yield/wait strategy defined by "client" Do not account SPINGETS,YIELDS, only WAITS GETS are accounted internally, but not externalized in any view KGX mutexes are not OS mutexes!!! Tanel Põder http://www.tanelpoder.com 10

Mutexes for Library Cache Used for protecting V$SQLSTATS buckets oradebug dump cursor_stats 1 Used for pinning library cache cursors and parent examination If _kks_use_mutex_pin=true (default from 10.2.0.2) oradebug dump librarycache level 10 In 11g+ mutexes are used instead of most library cache latches Instead of up to 67 library cache latches there's 131072 mutexes! Each library cache mutex protects one library cache hash bucket Known mutex types in 11g: Cursor Parent Cursor Pin Cursor Stat Library Cache hash table... Tanel Põder http://www.tanelpoder.com 11

V$SESSION_WAIT Shows wait events such: cursor: mutex S cursor: mutex X library cache: mutex S library cache: mutex X Mutex troubleshooting V$MUTEX_SLEEP Shows the wait time, and the number of sleeps for each combination of mutex type and location. Somewhat useless. V$MUTEX_SLEEP_HISTORY Shows last individual occurrences of mutex sleeps Based on a circular buffer, has most detail @mutexprof script The mutex sleeps are well instrumented in wait interface. P1,P2,P3 values show what is the hash value of library cache objects under contention, the session holding the mutex etc. v$event_name and v$session_wait "text" columns document the meaning of P1,P2,P3 Systemstate dumps http://el-caro.blogspot.com/2007/10/identifying-mutex-holder.html Tanel Põder http://www.tanelpoder.com 12

cursor: mutex S Mutex waits and their meaning - 1 We try to get a mutex on Parent cursor or V$SQLSTAT bucket in shared mode. The mutex is "in flux" (someone is in progress of taking it in shared mode) so we have to wait until the holder finishes its shared get. Used when: Examining parent cursor, Querying V$SQLSTATS bucket cursor: mutex X We try to get a mutex on Parent cursor or V$SQLSTAT bucket in exclusive mode. Someone is already holding the mutex in incompatible mode...either there's someone already holding the mutex in X mode...or there may be multiple holders in S mode Used when: Loading new child cursor under parent, Modifying V$SQLSTATS bucket, Updating bind capture data Tanel Põder http://www.tanelpoder.com 13

cursor: pin S Mutex waits and their meaning - 2 We try to pin the cursor in shared mode (for execution for example) Mutex for child cursor pinning is "in flux", someone is in process of pinning that same cursor already. We have to wait until the other session completes their pin request cursor: pin X We try to pin a cursor in exclusive mode, but someone already has pinned it in a non-compatible mode Either one session has pinned it in X mode or multiple sessions in S mode cursor: pin S wait on X We try to pin a cursor in shared mode, but someone already has pinned it in X mode Other session is currently loading that child cursor (parsing) Tanel Põder http://www.tanelpoder.com 14

Mutex waits and their meaning - 3 In 11g, most library cache latches have been replaced by mutexes directly on library cache hash buckets 131072 KGL hash buckets Each is protected by a separate mutex Less room for false contention http://blog.tanelpoder.com/2008/08/03/library-cache-latches-gone-in-oracle-11g/ library cache: mutex S Trying to get a mutex on library cache hash bucket in S mode The mutex is already held in incompatible mode or is "in flux" library cache: mutex X Trying to get a mutex on library cache hash bucket in X mode The mutex is already held in incompatible mode or is "in flux" Tanel Põder http://www.tanelpoder.com 15

Mutex wait event parameters - 1 SQL> @sed mutex <-- this script queries v$event_name EVENT_NAME PARAMETER1 PARAMETER2 PARAMETER3 ------------------------- --------------- --------------- ------------ cursor: mutex S idn value where sleeps cursor: mutex X idn value where sleeps cursor: pin S idn value where sleeps cursor: pin S wait on X idn value where sleeps cursor: pin X idn value where sleeps library cache: mutex S idn value where library cache: mutex X idn value where As with any wait event, the parameters (P1,P2,P3) provide additional detail, context info about the wait: Parameter1 (idn) can be used for finding the cursor related to mutex Parameter 2 (value) can be used for finding the session holding the mutex in exclusive mode For all shared mode holders a systemstate dump would be needed Tanel Põder http://www.tanelpoder.com 16

PARAMETER1 - idn: cursor:* wait events Mutex wait event parameters - 2 idn = hash value of the library cache object under protection library cache: mutex* wait events 1) library cache hash bucket number (if idn <= 131072) 2) idn = hash value of the library cache object under protection (if idn > 131072) Find SQL by hash_value: SELECT sql_text FROM v$sql WHERE hash_value = &idn; Find SQL by library cache hash bucket (idn <= 131072): SELECT sql_text FROM v$sql WHERE MOD(hash_value, 131072) = &idn; Find SQL from AWR by SQL_ID (hash_value is the lower half of SQLID): SELECT sql_text FROM dba_hist_sqlstat WHERE tpt.sqlid_to_sqlhash( sql_id ) = &idn; You'll find the TPT package in setup directory in TPT_public.zip Tanel Põder http://www.tanelpoder.com 17

PARAMETER2 - value: Mutex wait event parameters - 3 low bytes of word (2 or 4 bytes) - number of mutex shared references high bytes of word (2 or 4 bytes) - SID of exclusive holder SQL> select session_id, event, blocking_session, 2 to_char(p2, '0XXXXXXX') value_hex 3 from v$active_session_history 4 where event like 'library cache: mutex%'; SESSION_ID EVENT BLOCKING_SESSION VALUE_HEX ---------- --------------------------- ---------------- --------- 157 library cache: mutex X 00830000 PARAMETER 3 - where: where = maps to x$mutex_sleep.location_id Useful for understanding from which kernel function the mutex get operation was done. Used for advanced diagnostics. Tanel Põder http://www.tanelpoder.com 18

Questions? Tanel Põder http://www.tanelpoder.com 19

Thank you!!! Further questions are welcome: tanel@tanelpoder.com Slides, scripts and my blog: http://blog.tanelpoder.com If you liked this session, you will also like my Advanced Oracle Troubleshooting seminar! I do both public and private corporate seminars http://blog.tanelpoder.com/seminar/ Tanel Põder http://www.tanelpoder.com 20