90 lines
3.2 KiB
SQL
90 lines
3.2 KiB
SQL
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
|
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
|
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
--
|
|
-- File name: daplanline.sql (v1.0)
|
|
--
|
|
-- Purpose: Report response time consumption data from DBA_HIST_ACTIVE_SESS_HISTORY
|
|
-- by top SQL PLAN rowsource TYPE (not individual SQL)
|
|
--
|
|
-- Author: Tanel Poder
|
|
--
|
|
-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved.
|
|
--
|
|
-- Disclaimer: This script is provided "as is", no warranties nor guarantees are
|
|
-- made. Use at your own risk :)
|
|
--
|
|
-- Usage: @daplanline SYSDATE-1 SYSDATE
|
|
-- @daplanline DATE'2013-11-11' DATE'2013-11-12'
|
|
-- @daplanline "TIMESTAMP'2013-11-11 10:00:00'" "TIMESTAMP'2013-11-11 15:00:00'"
|
|
-- ^^^- note the double quotes around the timestamp syntax, needed due to spaces
|
|
--
|
|
-- Notes: This script runs on Oracle 11g+ and you should have the
|
|
-- Diagnostics and Tuning pack licenses for using it as it queries
|
|
-- some separately licensed views.
|
|
--
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON
|
|
|
|
COL asqlmon_operation FOR a100
|
|
COL asqlmon_predicates FOR a100 word_wrap
|
|
COL options FOR a30
|
|
|
|
COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE
|
|
COL asqlmon_sql_id HEAD SQL_ID NOPRINT
|
|
COL asqlmon_sql_child HEAD CHILD# NOPRINT
|
|
COL asqlmon_sample_time HEAD SAMPLE_HOUR
|
|
COL projection FOR A520
|
|
|
|
COL pct_child HEAD "Activity %" FOR A8
|
|
COL pct_child_vis HEAD "Visual" FOR A12
|
|
|
|
COL asqlmon_id HEAD "Line ID" FOR 9999
|
|
COL asqlmon_parent_id HEAD "Parent" FOR 9999
|
|
COL daplanline_plan_line FOR A60 HEAD "Plan Line"
|
|
|
|
BREAK ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_sample_time SKIP 1 DUP ON asqlmon_operation
|
|
|
|
WITH sq AS (
|
|
SELECT
|
|
-- to_char(ash.sample_time, 'YYYY-MM-DD HH24') sample_time
|
|
count(*) samples
|
|
, ash.sql_plan_operation
|
|
, ash.sql_plan_options
|
|
, ash.session_state
|
|
, ash.event
|
|
FROM
|
|
dba_hist_active_sess_history ash
|
|
WHERE
|
|
sample_time BETWEEN &1 AND &2
|
|
AND snap_id IN (SELECT snap_id FROM dba_hist_snapshot WHERE begin_interval_time >= &1 AND end_interval_time <= &2)
|
|
AND session_type = 'FOREGROUND'
|
|
GROUP BY
|
|
--to_char(ash.sample_time, 'YYYY-MM-DD HH24')
|
|
ash.sql_plan_operation
|
|
, ash.sql_plan_options
|
|
, ash.session_state
|
|
, ash.event
|
|
)
|
|
SELECT * FROM (
|
|
SELECT
|
|
sq.samples * 10 seconds
|
|
, LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER () * 100, 1), 999.9)||' %',8) pct_child
|
|
, '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER () * 10), '#'), ' '), 10,' ')||'|' pct_child_vis
|
|
--, sq.sample_time asqlmon_sample_time
|
|
, sq.sql_plan_operation ||' '|| sq.sql_plan_options daplanline_plan_line
|
|
, sq.session_state
|
|
, sq.event
|
|
FROM
|
|
sq
|
|
WHERE
|
|
1=1
|
|
ORDER BY
|
|
--sq.sample_time
|
|
seconds DESC
|
|
)
|
|
WHERE
|
|
rownum <= 30
|
|
/
|