2026-03-12 20:23:15
This commit is contained in:
110
vg/awr_xplan_unstable.sql
Normal file
110
vg/awr_xplan_unstable.sql
Normal file
@@ -0,0 +1,110 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display unstable execution plan from AWR
|
||||
* Version :
|
||||
* Parameters : 1 - From Timestamp (YYYY-MM-DD HH24:MI:SS)
|
||||
* 2 - To Timestamp (YYYY-MM-DD HH24:MI:SS)
|
||||
* 3 - Top record Count
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 12-Jun-12 Vishal Gupta Intial version
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE TO_TIMESTAMP
|
||||
UNDEFINE TOP_RECORDCOUNT
|
||||
|
||||
DEFINE FROM_TIMESTAMP="&&1"
|
||||
DEFINE TO_TIMESTAMP="&2"
|
||||
DEFINE TOP_RECORDCOUNT="&3"
|
||||
|
||||
|
||||
COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT
|
||||
COLUMN _TO_TIMESTAMP NEW_VALUE TO_TIMESTAMP NOPRINT
|
||||
COLUMN _TOP_RECORDCOUNT NEW_VALUE TOP_RECORDCOUNT NOPRINT
|
||||
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&FROM_TIMESTAMP','',to_char(sysdate - 7 - (1/1440),'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP"
|
||||
, DECODE('&&TO_TIMESTAMP','',to_char(sysdate + (1/1440),'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIMESTAMP"
|
||||
, DECODE('&&TOP_RECORDCOUNT','','20','&&TOP_RECORDCOUNT') "_TOP_RECORDCOUNT"
|
||||
FROM DUAL
|
||||
;
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ***********************************************************************
|
||||
PROMPT * Top &&TOP_RECORDCOUNT SQLIds with unstable execution plan
|
||||
PROMPT ***********************************************************************
|
||||
|
||||
|
||||
COLUMN force_matching_signature HEADING "Force Matching Signature" FORMAT 999999999999999999999
|
||||
COLUMN elapsed_time_perexec_max HEADING "Max|Elapsed|Time|(sec)" FORMAT 999,999,999.999
|
||||
COLUMN elapsed_time_perexec_min HEADING "Min|Elapsed|Time|(sec)" FORMAT 999,999,999.999
|
||||
COLUMN elapsed_time_perexec_avg HEADING "Avg|Elapsed|Time|(sec)" FORMAT 999,999,999.999
|
||||
COLUMN elapsed_time_perexec_deviation HEADING "Deviation|Elapsed|Time|(sec)" FORMAT 999,999,999.999
|
||||
|
||||
SELECT *
|
||||
FROM
|
||||
(
|
||||
SELECT ss.force_matching_signature
|
||||
, max(ss.sql_id) sql_id
|
||||
, max(ss.elapsed_time_total/1000000/ss.executions_total) elapsed_time_perexec_max
|
||||
, min(ss.elapsed_time_total/1000000/ss.executions_total) elapsed_time_perexec_min
|
||||
, avg(ss.elapsed_time_total/1000000/ss.executions_total) elapsed_time_perexec_avg
|
||||
, (max(ss.elapsed_time_total/1000000/ss.executions_total)
|
||||
- avg(ss.elapsed_time_total/1000000/ss.executions_total)
|
||||
)
|
||||
/ avg(ss.elapsed_time_total/1000000/ss.executions_total) elapsed_time_perexec_deviation
|
||||
FROM v$database d
|
||||
, dba_hist_snapshot s
|
||||
, dba_hist_sqlstat ss
|
||||
-- , dba_hist_sql_plan p
|
||||
WHERE d.dbid = s.dbid
|
||||
AND ss.dbid = s.dbid
|
||||
AND ss.instance_number = s.instance_number
|
||||
AND ss.snap_id = s.snap_id
|
||||
-- AND p.dbid = ss.dbid (+)
|
||||
-- AND p.sql_id = ss.sql_id (+)
|
||||
-- AND p.plan_hash_value = ss.plan_hash_value (+)
|
||||
-- AND p.id = 0 -- Top row which has cost as well
|
||||
AND s.begin_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS')
|
||||
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS')
|
||||
AND ss.force_matching_signature <> 0
|
||||
AND ss.executions_delta > 0
|
||||
AND ss.executions_total > 0
|
||||
AND ss.elapsed_time_total > 0
|
||||
GROUP BY ss.force_matching_signature
|
||||
/*
|
||||
HAVING (max(ss.elapsed_time_total/1000000/ss.executions_total)
|
||||
- avg(ss.elapsed_time_total/1000000/ss.executions_total)
|
||||
)
|
||||
/ avg(ss.elapsed_time_total/1000000/ss.executions_total) > 0.1
|
||||
*/
|
||||
ORDER BY elapsed_time_perexec_deviation desc
|
||||
)
|
||||
WHERE ROWNUM <= &&TOP_RECORDCOUNT
|
||||
/
|
||||
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE TO_TIMESTAMP
|
||||
UNDEFINE TOP_RECORDCOUNT
|
||||
|
||||
@@footer
|
||||
Reference in New Issue
Block a user