ASH – Active Session History Feel the Power Kyle Hailey

Slides:



Advertisements
Similar presentations
Database Tuning. Objectives Describe the roles associated with database tuning. Describe the dependency between tuning in different development phases.
Advertisements

9 Copyright © 2006, Oracle. All rights reserved. Automatic Performance Management.
Overview of performance tuning strategies Oracle Performance Tuning Allan Young June 2008.
1 Wait Event Enhancements in Oracle 10g Terry Sutton and Roger Schrag Database Specialists, Inc.
IO Waits Kyle Hailey #.2 Copyright 2006 Kyle Hailey Waits Covered in this Section  db file sequential read  db file scattered.
Enqueue Waits : Locks. #.2 Copyright 2006 Kyle Hailey Locks REDO Lib Cache Buffer Cache IO Locks Network.
INTRODUCTION TO ORACLE Lynnwood Brown System Managers LLC Oracle High Availability Solutions RAC and Standby Database Copyright System Managers LLC 2008.
Royal London Group A group of specialist businesses where the bottom line is always financial sense Oracle Statistics – with a little bit extra on top.
1 Chapter 16 Latch and Mutex Contention. 2 Architecture Overview of Latches Protect Oracle’s SGA Prevent two processes from updating same area of SGA.
Buffer Cache Waits. #.2 Copyright 2006 Kyle Hailey Buffer Cache Waits Waits Disk I/O Buffer Busy Library Cache Enqueue SQL*Net Free Buffer Hot Blocks.
Acknowledgments Byron Bush, Scott S. Hilpert and Lee, JeongKyu
Oracle9i Database Administrator: Implementation and Administration 1 Chapter 2 Overview of Database Administrator (DBA) Tools.
Oracle 10.2 for z/OS and z/Linux Performance Update.
The Self-managing Database: Automatic Performance Diagnosis Graham Wood Kyle Hailey Oracle Corporation Session id:
6 Copyright © 2006, Oracle. All rights reserved. Using Automatic Workload Repository.
ASH – Active Session History Feel the Power Kyle Hailey Embarcadero Technologies
Oracle Architecture. Database instance When a database is started the current state of the database is given by the data files, a set of background (BG)
Redo Waits Kyle Hailey #.2 Copyright 2006 Kyle Hailey Log File Waits  Redo is written to disk when  User commits  Log Buffer.
Redo Waits Kyle Hailey #.2 Copyright 2006 Kyle Hailey Redo REDO Lib Cache Buffer Cache Locks Network I/O.
Average Session Load (ASL) The Golden Metric ? Kyle Hailey
Waits Defined Kyle Hailey #.2 Copyright 2006 Kyle Hailey Top 36 Foreground Waits write complete waits library cache.
ASH – Active Session History Kyle Hailey Embarcadero Technologies
It’s time to do ASH! Tuesday, Februrary 8 th 2005 Gaja Krishna Vaidyanatha Principal, DBPerfMan LLC
Module 18 Monitoring SQL Server 2008 R2. Module Overview Monitoring Activity Capturing and Managing Performance Data Analyzing Collected Performance Data.
ASH Masters Kyle Hailey kylehailey.com slideshare.net/khailey 1 8/28/2015 ASH SQL Query Repository.
12 Copyright © 2004, Oracle. All rights reserved. Automatic Management.
2 Copyright © 2006, Oracle. All rights reserved. Performance Tuning: Overview.
#.1 Oracle Wait Interface in Oracle 10g. #.2 Today’s Session  Twelve wait event interface enhancements in Oracle 10g that we really like.  Documentation.
By Lecturer / Aisha Dawood 1.  You can control the number of dispatcher processes in the instance. Unlike the number of shared servers, the number of.
1 Robert Wijnbelt Health Check your Database A Performance Tuning Methodology.
Part II : Waits Events Kyle Hailey
Performance Diagnostics using STATSPACK data 18-May 2006 Tim Gorman SageLogix, Inc. N. CA Oracle Users Group.
Oracle Tuning Considerations. Agenda Why Tune ? Why Tune ? Ways to Improve Performance Ways to Improve Performance Hardware Hardware Software Software.
1 Oracle Architectural Components. 1-2 Objectives Listing the structures involved in connecting a user to an Oracle server Listing the stages in processing.
Learningcomputer.com SQL Server 2008 – Profiling and Monitoring Tools.
Oracle9i Performance Tuning Chapter 12 Tuning Tools.
© 2008 Quest Software, Inc. ALL RIGHTS RESERVED. Perfmon and Profiler 101.
Achieving Scalability, Performance and Availability on Linux with Oracle 9iR2-RAC Grant McAlister Senior Database Engineer Amazon.com Paper
1 06/05/08 Statspack Kyle Hailey
Oracle 10g Advanced Performance Tuning Kyle Hailey Delphix - wait events docs – tools S-ASH.
Average Active Sessions (AAS) The Golden Metric ? Kyle Hailey
#.6 Sampling Kyle Hailey
Troubleshooting 11i issues Adam Janbolat
Oracle 10g Advanced Performance Tuning Kyle Hailey - wait events docs – tools S-ASH and.
10G - New Manageability Features Presented by Lenka Vanek
#.1 ASH – Active Session History Feel the Power Kyle Hailey
#.1 SASH – Simulated ASH and other tools. #.2 OEMDB Optimizer Lab 128SASH performance$100,000$1500$500free SQL Tuning$100,000includedN/A Both$200,000$1500N/A.
Tracing Individual Users in Connection-pooled Environments with Oracle 10g Terry Sutton Database Specialists, Inc.
3 Copyright © 2006, Oracle. All rights reserved. Statistics and Wait Events.
Preface 1Performance Tuning Methodology: A Review Course Structure 1-2 Lesson Objective 1-3 Concepts 1-4 Determining the Worst Bottleneck 1-5 Understanding.
#.1 Average Active Sessions (AAS) The Golden Metric ? Kyle Hailey
Oracle9i Performance Tuning Chapter 4 Tuning the Shared Pool Memory.
OEM 10g Performance and Tuning. #.2 Copyright 2006 Kyle Hailey Performance SQL Diagnostics SQLTuning Performance Session DB HOME.
1 3/21/2016 Average Active Sessions (AAS) The Golden Metric ? Kyle Hailey perfvision.com.
8 Copyright © 2006, Oracle. All rights reserved. Tuning the Shared Pool.
3 Copyright © 2004, Oracle. All rights reserved. Database Architecture Comparison.
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 1.
Same Plan Different Performance Mauro Pagano. Consultant/Developer/Analyst Oracle  Enkitec  Accenture DBPerf and SQL Tuning Training Tools (SQLT, SQLd360,
SQL Advanced Monitoring Using DMV, Extended Events and Service Broker Javier Villegas – DBA | MCP | MCTS.
This document is provided for informational purposes only and Microsoft makes no warranties, either express or implied, in this document. Information.
Oracle Database Architectural Components
1 Copyright © 2005, Oracle. All rights reserved. Oracle Database Administration: Overview.
1 PVSS Oracle scalability Target = changes per second (tested with 160k) changes per client 5 nodes RAC NAS 3040, each with one.
Chapter 21 SGA Architecture and Wait Event Summarized & Presented by Yeon JongHeum IDS Lab., Seoul National University.
ASH – Active Session History Feel the Power
Kyle Hailey Redo Waits Kyle Hailey
From 4 Minutes to 8 Seconds in an Hour (or a bit less)
Troubleshooting Techniques(*)
Wait Event Enhancements in Oracle 10g
Presentation transcript:

ASH – Active Session History Feel the Power Kyle Hailey

#.2 Copyright 2006 Kyle Hailey ASH Whole New Paradigm in Technology The Power of ASH lies in Simplifying Performance Tuning  Totally new and exciting methodology  Cheaper, Quicker, Richer and better tasting too

#.3 Copyright 2006 Kyle Hailey Why should you care? Because ASH can Change your life …  10g immediately Accessible  Geeks: Via scripts in SQL  Managers : Graphical OEM  Stuck on Oracle 7,8,9 ? … my apologies because 10g rocks, but … no worries, the data is accessible for you too via scripts

#.4 Copyright 2006 Kyle Hailey Here’s a piece of Personal history

#.5 Copyright 2006 Kyle Hailey This is the story of how ASH changed my Life Once upon a time I was stuck in dull tech support … Finally I was promoted to head DBA, thinking my life was getting better…

#.6 Copyright 2006 Kyle Hailey But … It was then that I learned I needed to know what the databases were doing ALL the time Because lives and more importantly my job depended on it

#.7 Copyright 2006 Kyle Hailey What could I do?! Clearly a job for Stats Pack Because stats pack showed me every hour  All the Stats!  All the top Bottlenecks  Almost all the top SQL

#.8 Copyright 2006 Kyle Hailey So why wasn’t I feeling better? Hmmm … but … wait  What if my database hits a bottleneck 15 minutes after my last stats pack?!  What about that rouge coder who writes bad SQL … can I find his module gone mad?  Ok I found the top SQL but … now what?  What do I do with the top WAIT?

#.9 Copyright 2006 Kyle Hailey If lives (and my job) depended on my databases  Was once an hour really enough ?  Could Stats Pack find that rogue coder?  Could Stats Pack tell me why an SQL bottlenecked?  Could Stats Pack tell me the root of a wait bottleneck?

#.10 Copyright 2006 Kyle Hailey Don’t tell anyone but … I couldn’t even decipher Stats Pack half the time Often, I didn’t understand statspack’s lines

#.11 Copyright 2006 Kyle Hailey Oh no … it’s 3am my manager calls “why is the database hanging?!”  Who did it?  Where did the SQL get blocked?  What if the bottlenecked started 5 minutes after my last Stats Pack?

#.12 Copyright 2006 Kyle Hailey In that moment of crises Stats Pack couldn’t tell me … but ASH can

#.13 Copyright 2006 Kyle Hailey The crises of my day have left the “ASHes” of today. I didn’t have ASH but You do

#.14 Copyright 2006 Kyle Hailey It’s a Revolution and it’s an Evolution  Oracle 6 … ie the dark ages … there was once the Cache Buffer Hit Ratio  Oracle 7 … turned the lights on … Wait Events … hallelujah I can see the light  Oracle 10g … ASH has landed (like the wheels on the suitcases)

#.15 Copyright 2006 Kyle Hailey ASH uses Sampling New Paradigm  Clear Vision of the future  Use new sampling technology  Lets go of the need to know 100%  Statistical approximation  Cheaper  Richer Multidimensional Data  Identifies  SQL  Sessions  Objects  Machine  User

#.16 Copyright 2006 Kyle Hailey To identify Players before ASH  Sessions  # sessions x (# wait events + statistics)  Example (150 x ( ) = 150,000 )  SQL  v$sql  Could be 10000s  Takes out latches that compete with other sql executions  Objects  V$segstat 9i+  Could be 1000s of objects Expensive !

#.17 Copyright 2006 Kyle Hailey ASH – Intelligence for the new Millennium  Intelligently Collects Data  It self adjusts for your needs  More activity, more data collected  Less activity, less data collected  Those old methods collected everything  Obfuscated the problem, too many statistics too late  Costly  Too Granular – once an hour ?! Give me a break

ASH Samples Session State TIME ? ? ??? Sessions change a lot quicker but can get the main picture via sampling by sampling faster Every second 10:00:00 10:00:0110:00:02 10:00:03 10:00:04 10:00:05

#.19 Copyright 2006 Kyle Hailey Sampling is like taking Pictures

#.20 Copyright 2006 Kyle Hailey If happens a lot or for long … we’ll catch it, guaranteed

#.21 Copyright 2006 Kyle Hailey Session States IO CPU Idle Wait Work LatencyContention

#.22 Copyright 2006 Kyle Hailey IDLE  Example : SQL*Net Message from Client  10g  9i or below – just have to keep track  Statspack STATS$IDLE_EVENT select name from v$event_name where wait_class='Idle'; 58 Rows

#.23 Copyright 2006 Kyle Hailey CPU  ASH: SESSION_STATE = “ON CPU”  ASH: wait_time > 0 10g: v$session 9i: v$session_wait w.wait_time != 0 /* on CPU */ and s.status='ACTIVE' /* ACTIVE */ Identifying CPU via v$session_wait is a huge break through

#.24 Copyright 2006 Kyle Hailey IO  ASH: SESSION_STATE=‘WAITING’ &  10g: WAIT_CLASS=‘User I/O’  9i:  Look at 10g for ideas  db file sequential read  db file scattered read  db file parallel read  direct path read

#.25 Copyright 2006 Kyle Hailey WAITING  ASH: SESSION_STATE=‘WAITING’  ASH: WAIT_TIME <= 0  WAIT_CLASS 1. Administrative 2. Application 3. Cluster 4. Commit 5. Concurrency 6. Configuration 7. Network 8. Other 9. Scheduler 10. System I/O  800+ WAIT

Session 1 Session 2 Session 3 Session 4 TIME Samples for all users 10:15:00 10:15:01 10:15:02 10:15:03 10:15:04 10:15:05 10:15:06 10:15:07

#.27 Copyright 2006 Kyle Hailey ASH Fields SQL> v$active_session_history Name Null? Type SAMPLE_ID NUMBER SAMPLE_TIME TIMESTAMP(3) SESSION_ID NUMBER SESSION_SERIAL# NUMBER USER_ID NUMBER SQL_ID VARCHAR2(13) SQL_CHILD_NUMBER NUMBER SQL_PLAN_HASH_VALUE NUMBER SQL_OPCODE NUMBER SERVICE_HASH NUMBER SESSION_TYPE VARCHAR2(10) SESSION_STATE VARCHAR2(7) QC_SESSION_ID NUMBER QC_INSTANCE_ID NUMBER EVENT VARCHAR2(64) EVENT_ID NUMBER EVENT# NUMBER SEQ# NUMBER P1 NUMBER P2 NUMBER P3 NUMBER WAIT_TIME NUMBER TIME_WAITED NUMBER CURRENT_OBJ# NUMBER CURRENT_FILE# NUMBER CURRENT_BLOCK# NUMBER PROGRAM VARCHAR2(48) MODULE VARCHAR2(48) ACTION VARCHAR2(32) CLIENT_ID VARCHAR2(64

#.28 Copyright 2006 Kyle Hailey v$active_session_history SESSION_ID NUMBER SESSION_SERIAL# NUMBER USER_ID NUMBER SERVICE_HASH NUMBER SESSION_TYPE VARCHAR2(10) PROGRAM VARCHAR2(64) MODULE VARCHAR2(48) ACTION VARCHAR2(32) CLIENT_ID VARCHAR2(64) EVENT VARCHAR2(64) EVENT_ID NUMBER EVENT# NUMBER SEQ# NUMBER P1 NUMBER P2 NUMBER P3 NUMBER WAIT_TIME NUMBER TIME_WAITED NUMBER CURRENT_OBJ# NUMBER CURRENT_FILE# NUMBER CURRENT_BLOCK# NUMBER0 SQL_ID VARCHAR2(13) SQL_CHILD_NUMBER NUMBER SQL_PLAN_HASH_VALUE NUMBER SQL_OPCODE NUMBER QC_SESSION_ID NUMBER QC_INSTANCE_ID NUMBER SAMPLE_ID NUMBER SAMPLE_TIME TIMESTAMP(3) When Session SQL Wait SESSION_STATE VARCHAR2(7) WAIT_TIME NUMBER State TIME_WAITED NUMBER Duration

#.29 Copyright 2006 Kyle Hailey Primary Fields of ASH SESSION_ID EVENT SQL_ID SAMPLE_TIME When Session SQL Wait SESSION_STATE State TIME_WAITED Duration

#.30 Copyright 2006 Kyle Hailey Amazing things YOU can do with ASH Consumers  Top Session  Top User  Top SQL  Top Object  Top Module.Action  Top Program  Top Service  Top Client  Top Wait No machine  X Resources CPU Waits Event (800*) I/O File Block Time (32 columns in ASH)

#.31 Copyright 2006 Kyle Hailey Groupings – Top Consumer SESSION_ID SESSION_SERIAL# (signal SID reuse) SESSION_TYPE (FOREGROUND,BACKGROUND) CURRENT_OBJ# CURRENT_FILE# CURRENT_BLOCK# USER_ID (SYS, SYSTEM, SCOTT etc) SERVICE_HASH (OE,GL,HR) PROGRAM (SQL, JDBC, Forms etc) MODULE.ACTION(PLSQL tagging) CLIENT_ID (identifying users in a session pool) SQL_ID QC_SESSION_ID - Query Coordinator QC_INSTANCE_ID – RAC EVENT + P1, P2, P3

#.32 Copyright 2006 Kyle Hailey Select session_id, count(*) from v$active_session_history where session_state= ‘ON CPU‘ and SAMPLE_TIME > sysdate – (5/(24*60)) group by session_id order by count(*) desc; Select session_id, count(*) from v$active_session_history where session_state= ‘ON CPU‘ and SAMPLE_TIME > sysdate – (5/(24*60)) group by session_id order by count(*) desc; Top CPU Session Who is the rogue session ?

#.33 Copyright 2006 Kyle Hailey Results Top CPU Session SESSION_ID COUNT(*) SESSION_ID COUNT(*) SESSION_ID COUNT(*)

#.34 Copyright 2006 Kyle Hailey CPU with Bars SESSION_ID COUNT(*) % Bar |*** | |** | |* | | | | | | | | | SESSION_ID COUNT(*) % Bar |*** | |** | |* | | | | | | | | | Bar shows 10% increments

#.35 Copyright 2006 Kyle Hailey Select session_id, count(*) from v$active_session_history where session_state=‘WAITING’ and SAMPLE_TIME > SYSDATE - (5/(24*60)) group by session_id order by count(*) desc; Select session_id, count(*) from v$active_session_history where session_state=‘WAITING’ and SAMPLE_TIME > SYSDATE - (5/(24*60)) group by session_id order by count(*) desc; Top Waiting Session  Top Waiting Session in last 5 minutes

#.36 Copyright 2006 Kyle Hailey SESSION_ID COUNT(*) SESSION_ID COUNT(*) Top Waiting Session Results

#.37 Copyright 2006 Kyle Hailey Top SQL from ASH select ash.SQL_ID, sum(decode(ash.session_state,'ON CPU',1,0)) "CPU", sum(decode(ash.session_state,'WAITING',1,0)) - sum(decode(ash.session_state,'WAITING', decode(en.wait_class, 'User I/O',1,0),0)) "WAIT", sum(decode(ash.session_state,'WAITING', decode(en.wait_class, 'User I/O',1,0),0)) "IO", sum(decode(ash.session_state,'ON CPU',1,1)) "TOTAL" from v$active_session_history ash, v$event_name en where SQL_ID is not NULL and en.event#=ash.event# group by sql_id order by sum(decode(session_state,'ON CPU',1,1)) desc select ash.SQL_ID, sum(decode(ash.session_state,'ON CPU',1,0)) "CPU", sum(decode(ash.session_state,'WAITING',1,0)) - sum(decode(ash.session_state,'WAITING', decode(en.wait_class, 'User I/O',1,0),0)) "WAIT", sum(decode(ash.session_state,'WAITING', decode(en.wait_class, 'User I/O',1,0),0)) "IO", sum(decode(ash.session_state,'ON CPU',1,1)) "TOTAL" from v$active_session_history ash, v$event_name en where SQL_ID is not NULL and en.event#=ash.event# group by sql_id order by sum(decode(session_state,'ON CPU',1,1)) desc

#.38 Copyright 2006 Kyle Hailey Top SQL from ASH Results SQL_ID CPU WAITING IO TOTAL c1xvq9ufwcjc wjw6rz5uvbp dm8hr9qd jp5gasmrah cv8xnv81kf p9bzu19v965k zu8pxnun66bu db2jr13nup72v ks5gnj38hghv SQL_ID CPU WAITING IO TOTAL c1xvq9ufwcjc wjw6rz5uvbp dm8hr9qd jp5gasmrah cv8xnv81kf p9bzu19v965k zu8pxnun66bu db2jr13nup72v ks5gnj38hghv

#.39 Copyright 2006 Kyle Hailey Top Session select ash.session_id, ash.session_serial#, ash.user_id, ash.program, sum(decode(ash.session_state,'ON CPU',1,0)) "CPU", sum(decode(ash.session_state,'WAITING',1,0)) - sum(decode(ash.session_state,'WAITING', decode(en.wait_class,'User I/O',1, 0 ), 0)) "WAITING", sum(decode(ash.session_state,'WAITING', decode(en.wait_class,'User I/O',1, 0 ), 0)) "IO", sum(decode(session_state,'ON CPU',1,1)) "TOTAL" from v$active_session_history ash, v$event_name en where en.event# = ash.event# group by session_id,user_id,session_serial#,program order by sum(decode(session_state,'ON CPU',1,1)) select ash.session_id, ash.session_serial#, ash.user_id, ash.program, sum(decode(ash.session_state,'ON CPU',1,0)) "CPU", sum(decode(ash.session_state,'WAITING',1,0)) - sum(decode(ash.session_state,'WAITING', decode(en.wait_class,'User I/O',1, 0 ), 0)) "WAITING", sum(decode(ash.session_state,'WAITING', decode(en.wait_class,'User I/O',1, 0 ), 0)) "IO", sum(decode(session_state,'ON CPU',1,1)) "TOTAL" from v$active_session_history ash, v$event_name en where en.event# = ash.event# group by session_id,user_id,session_serial#,program order by sum(decode(session_state,'ON CPU',1,1)) select ash.session_id, ash.session_serial#, ash.user_id, ash.program, sum(decode(ash.session_state,'ON CPU',1,0)) "CPU", sum(decode(ash.session_state,'WAITING',1,0)) - sum(decode(ash.session_state,'WAITING', decode(en.wait_class,'User I/O',1, 0 ), 0)) "WAITING", sum(decode(ash.session_state,'WAITING', decode(en.wait_class,'User I/O',1, 0 ), 0)) "IO", sum(decode(session_state,'ON CPU',1,1)) "TOTAL" from v$active_session_history ash, v$event_name en where en.event# = ash.event# group by session_id,user_id,session_serial#,program order by sum(decode(session_state,'ON CPU',1,1))

#.40 Copyright 2006 Kyle Hailey Top Session Results SESSION_ID SERIAL# USER_ID PROGRAM CPU WAITING IO sqlplus (LGWR) (CKPT) (DBW0) (PMON) Executor.exe Executor.exe Executor.exe Executor.exe SESSION_ID SERIAL# USER_ID PROGRAM CPU WAITING IO sqlplus (LGWR) (CKPT) (DBW0) (PMON) Executor.exe Executor.exe Executor.exe Executor.exe

#.41 Copyright 2006 Kyle Hailey Top Session w/ Username select decode(nvl(to_char(s.sid),-1),-1,'DISCONNECTED','CONNECTED') "STATUS", topsession.session_id "SESSION_ID", u.name "NAME", topsession.program "PROGRAM", max(topsession.CPU) "CPU", max(topsession.WAITING) "WAITING", max(topsession.IO) "IO", max(topsession.TOTAL) "TOTAL" from ( {previous query} ) topsession, v$session s, user$ u where u.user# =topsession.user_id and /* outer join to v$session because the session might be disconnected */ topsession.session_id = s.sid (+) and topsession.session_serial# = s.serial# (+) group by topsession.session_id, topsession.session_serial#, topsession.user_id, topsession.program, s.username,s.sid,s.paddr,u.name order by max(topsession.TOTAL) desc select decode(nvl(to_char(s.sid),-1),-1,'DISCONNECTED','CONNECTED') "STATUS", topsession.session_id "SESSION_ID", u.name "NAME", topsession.program "PROGRAM", max(topsession.CPU) "CPU", max(topsession.WAITING) "WAITING", max(topsession.IO) "IO", max(topsession.TOTAL) "TOTAL" from ( {previous query} ) topsession, v$session s, user$ u where u.user# =topsession.user_id and /* outer join to v$session because the session might be disconnected */ topsession.session_id = s.sid (+) and topsession.session_serial# = s.serial# (+) group by topsession.session_id, topsession.session_serial#, topsession.user_id, topsession.program, s.username,s.sid,s.paddr,u.name order by max(topsession.TOTAL) desc

#.42 Copyright 2006 Kyle Hailey Top Session Finding a Rogue User STATUS SESSION_ID NAME PROGRAM CPU WAITING IO CONNECTED 247 CPU_Monger ChMgr304.exe CONNECTED 277 SYS (LGWR) CONNECTED 278 SYS (DBW0) CONNECTED 276 SYS (CKPT) CONNECTED 280 SYS (PMON) DISCONNECTED 255 SYSTEM Executor.exe DISCONNECTED 257 SYSTEM Executor.exe DISCONNECTED 255 SYSTEM Executor.exe DISCONNECTED 257 SYSTEM Executor.exe STATUS SESSION_ID NAME PROGRAM CPU WAITING IO CONNECTED 247 CPU_Monger ChMgr304.exe CONNECTED 277 SYS (LGWR) CONNECTED 278 SYS (DBW0) CONNECTED 276 SYS (CKPT) CONNECTED 280 SYS (PMON) DISCONNECTED 255 SYSTEM Executor.exe DISCONNECTED 257 SYSTEM Executor.exe DISCONNECTED 255 SYSTEM Executor.exe DISCONNECTED 257 SYSTEM Executor.exe

#.43 Copyright 2006 Kyle Hailey SASH – DB Detailed Analysis Begin Time : :04:48 Analysis End Time : :19:45 Start time, mins ago: 15 Request Duration : 15 Collections : 528 Data Values : 3327 Elapsed Time: 15 mins WAIT_EVENT CNT % Active Ave_Act_Sess latch free log buffer space buffer busy waits db file scattered read library cache pin log file sync ON CPU enqueue db file sequential read sum Analysis Begin Time : :04:48 Analysis End Time : :19:45 Start time, mins ago: 15 Request Duration : 15 Collections : 528 Data Values : 3327 Elapsed Time: 15 mins WAIT_EVENT CNT % Active Ave_Act_Sess latch free log buffer space buffer busy waits db file scattered read library cache pin log file sync ON CPU enqueue db file sequential read sum 6.3

#.44 Copyright 2006 Kyle Hailey SASH – ASL over TM NPTS AVEACT GRAPH CPU WAITS AUG 13:00: AUG 14:00: AUG 15:00: AUG 16:00: AUG 17:00: AUG 18:00: AUG 19:00: AUG 20:00: AUG 21:00: AUG 22:00: AUG 23:00: AUG 00:00: AUG 01:00: AUG 02:00: AUG 03:00: AUG 04:00: AUG 05:00: AUG 06:00: AUG 07:00: AUG 08:00: AUG 09:00: TM NPTS AVEACT GRAPH CPU WAITS AUG 13:00: AUG 14:00: AUG 15:00: AUG 16:00: AUG 17:00: AUG 18:00: AUG 19:00: AUG 20:00: AUG 21:00: AUG 22:00: AUG 23:00: AUG 00:00: AUG 01:00: AUG 02:00: AUG 03:00: AUG 04:00: AUG 05:00: AUG 06:00: AUG 07:00: AUG 08:00: AUG 09:00:

#.45 Copyright 2006 Kyle Hailey SASH – ASL over time with TO_CHAR(STA AAS AAS1 FIRST AAS2 SECOND GRAPH :00: db file sequent.10 CPU :00: direct path wri.49 log file sync :00: direct path wri 1.93 log file sync :00: direct path wri.57 log file sync :00: log file sync.32 CPU :00: CPU.45 log file sync :00: log file sync.39 CPU :00: log file sync.27 CPU :00: log file sync.31 CPU :00: log file sync.41 CPU :00: log file sync.27 CPU :00: log file sync.27 CPU :00: log file sync.31 CPU :00: direct path wri.52 log file sync :00: direct path wri 1.58 log file sync :00: CPU.27 log file sync :00: CPU.83 enqueue TO_CHAR(STA AAS AAS1 FIRST AAS2 SECOND GRAPH :00: db file sequent.10 CPU :00: direct path wri.49 log file sync :00: direct path wri 1.93 log file sync :00: direct path wri.57 log file sync :00: log file sync.32 CPU :00: CPU.45 log file sync :00: log file sync.39 CPU :00: log file sync.27 CPU :00: log file sync.31 CPU :00: log file sync.41 CPU :00: log file sync.27 CPU :00: log file sync.27 CPU :00: log file sync.31 CPU :00: direct path wri.52 log file sync :00: direct path wri 1.58 log file sync :00: CPU.27 log file sync :00: CPU.83 enqueue

#.46 Copyright 2006 Kyle Hailey Many Ways to Attack Problems Confusing  How to Attack the problem?  Top SQL?  Top wait for that SQL?  Top Waiting Session ?  Top Waits for that Session  Top Waits for Database?  Top Session waiting for that wait  Top SQL for that wait Solution - Graphics

#.47 Copyright 2006 Kyle Hailey Mining Data is Non Trivial  Many Dimensions to consider  Constantly Varying time frames  Luckily 10g automates all of this functionality.  collects all of the data  analyses all the wait events  reports on bottlenecks  supplies solutions  Graphics add tremendous ease and power

Session 1 Session 2 Session 3 Session 4 TIME Graphical ASH

#.49 Copyright 2006 Kyle Hailey Graph of User States

#.50 Copyright 2006 Kyle Hailey One Second Graph

#.51 Copyright 2006 Kyle Hailey 15 Second Averages

#.52 Copyright 2006 Kyle Hailey Maximum CPU Line

#.53 Copyright 2006 Kyle Hailey Idle Users

#.54 Copyright 2006 Kyle Hailey OEM Perf Page

#.55 Copyright 2006 Kyle Hailey OEM Perf Page

#.56 Copyright 2006 Kyle Hailey ASH vs Statistics  Statistics  are more expensive  have lag time  lack clear identification of culprits

#.57 Copyright 2006 Kyle Hailey Statistic Lag Time Counters Samples Slight Lags

#.58 Copyright 2006 Kyle Hailey CPU Lag Problem  ASH is the only way to see CPU usage realtime  V$sysstat reports CPU but  is only updated at the end of the call.  Long calls look deceiving like no CPU is being used

#.59 Copyright 2006 Kyle Hailey CPU in ASH vs Stats

#.60 Copyright 2006 Kyle Hailey ASH Sampling Cheap Three Methods 1.With PL/SQL it’s less that 1 % CPU with 10 average active sessions 2.DMA - direct memory attach to SGA Using C code 200x Cheaper 3.ASH in 10g should be even cheaper than DMA because it’s done in the kernel

#.61 Copyright 2006 Kyle Hailey ASH – In Memory  Collects active session data only  History v$session_wait + v$session + extras  Circular Buffer - 1M to 128M (~2% of SGA)  Flushed every hour to disk or when buffer 2/3 full (it protects itself so you can relax)

#.62 Copyright 2006 Kyle Hailey ASH Sizing …  Avg row around 150bytes  3600 secs in an hour  ~ ½ Meg per Active Session per hour  That’s generally over an hour of ASH

#.63 Copyright 2006 Kyle Hailey How ASH works V$session_wait + v$session + extras MMON/ MMNL v$active_session_history wrh$_active_session_history Only writes out 1 in 10 rows via direct path inserts

#.64 Copyright 2006 Kyle Hailey Select reads backwards - -No latching - -No read consistency - -Index on time Insert point ASH buffer Insert one direction - Touch up wait times

#.65 Copyright 2006 Kyle Hailey Family of ASH Tables v$session_wait v$active_session_history wrh$active_session_history V$session_wait_history DBA_HIST_ACTIVE_SESS_HISTORY

#.66 Copyright 2006 Kyle Hailey ASH Tables v$session_wait SID SEQ# EVENT P1TEXT P1 P1RAW P2TEXT P2 P2RAW P3TEXT P3 P3RAW WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS WAIT_TIME SECONDS_IN_WAIT STATE v$session_wait_history SID SEQ# EVENT# EVENT P1TEXT P1 P2TEXT P2 P3TEXT P3 WAIT_TIME v$event_name EVENT_ID EVENT# EVENT_ID NAME PARAMETER1 PARAMETER2 PARAMETER3 WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS v$active_session_history SAMPLE_ID SAMPLE_TIME SESSION_ID SESSION_SERIAL# USER_ID SQL_ID SQL_CHILD_NUMBER SQL_PLAN_HASH_VALUE SQL_OPCODE SERVICE_HASH SESSION_TYPE SESSION_STATE QC_SESSION_ID QC_INSTANCE_ID SEQ# EVENT# P1 P2 P3 WAIT_TIME TIME_WAITED CURRENT_OBJ# CURRENT_FILE# CURRENT_BLOCK# PROGRAM MODULE ACTION CLIENT_ID current 10 samples hour DBA_HIST_ACTIVE_SESS_HISTORY wrh$active_session_history SNAP_D DBID INSTANCE_NUMBER SAMPLE_ID SAMPLE_TIME SESSION_ID SESSION_SERIAL# USER_ID SQL_ID SQL_CHILD_NUMBER SQL_PLAN_HASH_VALUE SQL_OPCODE SERVICE_HASH SESSION_TYPE SESSION_STATE QC_SESSION_ID QC_INSTANCE_ID SEQ# EVENT_ID P1 P2 P3 WAIT_TIME TIME_WAITED CURRENT_OBJ# CURRENT_FILE# CURRENT_BLOCK# PROGRAM MODULE ACTION CLIENT_ID 7 days (disk) 1 in 10

#.67 Copyright 2006 Kyle Hailey Wait Time vs Time Waited  SESSION_STATE  Waiting, on CPU  Based on WAIT_TIME  WAIT_TIME (v$session, v$session_wait, v$ash)  0 => waiting  >0 => CPU (value is time of last wait)  TIME_WAITED  Actual time waited for event  0 until wait finishes  Fix up values (no one else can do this)

#.68 Copyright 2006 Kyle Hailey Oradebug  Dump to trace file SQL> oradebug dump ash 5 SQL> Alter session set events ‘immediate tracename ashdump level 5’; level 5 = # of minutes loader file rdbms/demo/ashldr.ctl SQL> oradebug ashdump 5 SQL> Alter session set events ‘immediate tracename ashdump level 5’;

#.69 Copyright 2006 Kyle Hailey INIT.ORA statistics_level = Typical (default) PARAMETER SESSION_VALUE INSTANCE_VAL _ash_sampling_interval milliseconds _ash_size ASH buffer size _ash_enable TRUE TRUE Turn on/off ASH sampling, flushing and the V$ views on ASH _ash_disk_write_enable TRUE TRUE Flush to disk _ash_disk_filter_ratio write 1 in 10 points _ash_sample_all FALSE FALSE Sample including idle waits

# ASH Extras  BLOCKING_SESSION  BLOCKING_SESSION_STATUS  BLOCKING_SESSION_SERIAL#  P1TEXT  P2TEXT  P3TEXT  WAIT_CLASS  WAIT_CLASS_ID  XID 70 11/20/2015

#.71 Copyright 2006 Kyle Hailey 10.2 Extras  10gR2 add fields to ASH  Blocking Session Id, serial# and state ***  XID, transaction ID  RAC event Fixup  Plan Hash Fix up  10gR1 - during parsing no plan, good way to find parsing problems  10gR2 – get plan hash fixup – good but lose some ability to find parsing problems  Wait Class, needed this for grouping  Force_matching_signature – sql profile id

# ASH Extras  FORCE_MATCHING_SIGNATURE  PLSQL_ENTRY_OBJECT_ID  PLSQL_ENTRY_SUBPROGRAM_ID  PLSQL_OBJECT_ID  PLSQL_SUBPROGRAM_ID 72 11/20/2015 ALL_PROCEDURES where object_id = plsql_object_id where object_id = plsql_object_id and subprogram_id = plsql_subprogram_id

# /20/2015 PLSQL Tracking  Package/Procedure/SQL tracking calling_code SQL_ID COUNT(*) ORDERENTRY.NEWORDER 0uuqgjq7k12nf 258 ORDERENTRY.NEWCUSTOMER 0bzhqhhj9mpaa 262 ORDERENTRY.BROWSEANDUPDATEORDERS 41zu158rqf4kf 301 ORDERENTRY.NEWORDER 0yas01u2p9ch4 569 PARSE_SAME 3vjxpmhhzngu4 874 ORDERENTRY.BROWSEANDUPDATEORDERS 05s4vdwsf select object_name package||.|| procedure_name, sql_id, count(*) from v$active_session_history ash, all_procedures procs where ash.PLSQL_ENTRY_OBJECT_ID = procs.object_id and ash.PLSQL_ENTRY_SUBPROGRAM_ID = procs.SUBPROGRAM_ID

#.74 Copyright 2006 Kyle Hailey 11g ASH extras SQL Elapsed SQL_EXEC_ID SQL_EXEC_START IN_CONNECTION_MGMT IN_PARSE IN_HARD_PARSE IN_SQL_EXECUTION IN_PLSQL_EXECUTION IN_PLSQL_RPC IN_PLSQL_COMPILATION IN_JAVA_EXECUTION IN_BIND IN_CURSOR_CLOSE SQL_PLAN_LINE_ID SQL_PLAN_OPERATION SQL_PLAN_OPTIONS CURRENT_ROW# EVENT# QC_SESSION_SERIAL# CONSUMER_GROUP_ID FLAGS ETC CPU Analysis – non Timed SQL Row Source REMOTE_INSTANCE# RAC – remote transfers TOP_LEVEL_SQL_ID TOP_LEVEL_SQL_OPCODE Recursive SQL

#.75 Copyright 2006 Kyle Hailey 11g ASH extras  Run-time SQL row source information  Identifies current row source within plan  SQL execution ID  Is this same execution as last sample?  can see how long sql has been running  Operation bit vector  Capture non-timed operations  Examples: fetch, binding, close  Remote instance id for Cache transfers  Which instance sourced requested block?

#.76 Copyright 2006 Kyle Hailey How Many Active Sessions?  How much data does ASH Collect ?  1 CPU means max 1 Avg Active Session unless there is a bottleneck Big site examples:  Oracle 4 way RAC internal apps  10,000 connected, 200 active  One Site  3000 connected, 30 Active  Site  12,000 connected, 100 active

#.77 Copyright 2006 Kyle Hailey Simulating ASH   ASH is new in 10g   ASH data exist since V7   Need Diagnostic Pack License    Collect it yourself   SASH – Simulated ASH   Graphical Monitor Consumes < 1% CPU for 10 active sessions (a lot)

#.78 Copyright 2006 Kyle Hailey Sampling  Sampling is the future  Took clean vision to create  Bit of a leap of faith  Less Accurate but more powerful than past  Inaccuracies unimportant for the most part  Feasible since version 7  You can implement it yourself  Graphics are the only way to full harness the power

#.79 Copyright 2006 Kyle Hailey Summary  To solve hard problems you need Sampling  If you have 10g and a license you can use  V$active_session_history  OEM 10g (can access some 9 sampling)  ?/rdbms/admim/ashrpt.sql  If you are on 7,8,9 or 10g without the license  Need custom sampling  SASH – Simulated ASH  ASHMON – graphical

#.80 Copyright 2006 Kyle Hailey ASH Summary Faster, Cheaper, instant (no lag) … but most importantly Rich & Multidimensional  Overview of system load  Drilldowns into problems  Sql  Session  Wait event  Details information on problem resolution  OEM simplifies mining of ASH data