2026-03-12 20:23:15
This commit is contained in:
104
mhouri/loadSPMfromAWR.sql
Normal file
104
mhouri/loadSPMfromAWR.sql
Normal file
@@ -0,0 +1,104 @@
|
||||
/* --|-------------------------------------------------------------------------|
|
||||
--| Author : Mohamed Houri --|
|
||||
--| Date : 08/06/2022 --|
|
||||
--| inspired by : Carlos Sierra create_spb_from_awr.sq script --|
|
||||
--| Scope : Create a SPM baseline from a historical execution plan --|
|
||||
--| Usage : @loadSPMfromAWR --|
|
||||
--| Remarks : the begin and end snap must be different --|
|
||||
--| : the plan hash value must be present in the end snap --|
|
||||
--| : for example if you are in the following case --|
|
||||
--| --|
|
||||
--| SQL> @loadSPMAWR --|
|
||||
--| Enter sql_id: b64jvr5722ujx --|
|
||||
--| --|
|
||||
--| PLAN_HASH_VALUE AVG_ET_SECS EXECUTIONS_TOTAL --|
|
||||
--| --------------- ----------- ---------------- --|
|
||||
--| 1362763525 17.825681 1 --|
|
||||
--| 1518369540 --|
|
||||
--| --|
|
||||
--| Enter Plan Hash Value: 1362763525 --|
|
||||
--| --|
|
||||
--| BEGIN_SNAP_ID END_SNAP_ID --|
|
||||
--| ------------- ----------- --|
|
||||
--| 692 692 --|
|
||||
--| --|
|
||||
--| Enter begin snap: 691 spot this --|
|
||||
--| Enter end snap: 692 --|
|
||||
--| --|
|
||||
--| PL/SQL procedure successfully completed. --|
|
||||
--| --|
|
||||
--| RS --|
|
||||
--| ---------- --|
|
||||
--| 1 --|
|
||||
--|-----------------------------------------------------------------------| */
|
||||
|
||||
acc sql_id prompt 'Enter sql_id: ';
|
||||
|
||||
with p as
|
||||
(SELECT
|
||||
plan_hash_value
|
||||
FROM
|
||||
dba_hist_sql_plan
|
||||
WHERE
|
||||
sql_id = trim('&&sql_id.')
|
||||
AND other_xml IS NOT NULL )
|
||||
,a as
|
||||
(SELECT
|
||||
plan_hash_value
|
||||
,SUM(elapsed_time_total)/SUM(executions_total) avg_et_secs
|
||||
,MAX(executions_total) executions_total
|
||||
FROM
|
||||
dba_hist_sqlstat
|
||||
WHERE
|
||||
sql_id = TRIM('&&sql_id.')
|
||||
AND executions_total > 0
|
||||
GROUP BY
|
||||
plan_hash_value
|
||||
)
|
||||
SELECT
|
||||
p.plan_hash_value
|
||||
,ROUND(a.avg_et_secs/1e6, 6) avg_et_secs
|
||||
,a.executions_total
|
||||
FROM
|
||||
p,a
|
||||
WHERE
|
||||
p.plan_hash_value = a.plan_hash_value(+)
|
||||
ORDER BY
|
||||
avg_et_secs NULLS LAST;
|
||||
|
||||
acc plan_hash_value prompt 'Enter Plan Hash Value: ';
|
||||
|
||||
COL dbid new_v dbid NOPRI;
|
||||
SELECT dbid FROM v$database;
|
||||
|
||||
col begin_snap_id new_v begin_snap_id;
|
||||
col end_snap_id new_v end_snap_id;
|
||||
|
||||
SELECT
|
||||
MIN(p.snap_id) begin_snap_id
|
||||
,MAX(p.snap_id) end_snap_id
|
||||
FROM
|
||||
dba_hist_sqlstat p
|
||||
,dba_hist_snapshot s
|
||||
WHERE
|
||||
p.dbid = &&dbid
|
||||
AND p.sql_id = '&&sql_id.'
|
||||
AND p.plan_hash_value = to_number('&&plan_hash_value.')
|
||||
AND s.snap_id = p.snap_id
|
||||
AND s.dbid = p.dbid
|
||||
AND s.instance_number = p.instance_number;
|
||||
|
||||
acc begin_snap_id prompt 'Enter begin snap: ';
|
||||
acc end_snap_id prompt 'Enter end snap: ';
|
||||
|
||||
var rs number;
|
||||
|
||||
begin
|
||||
:rs := dbms_spm.load_plans_from_awr(begin_snap => &&begin_snap_id.
|
||||
,end_snap => &&end_snap_id.
|
||||
,basic_filter => q'# sql_id = TRIM('&&sql_id.') and plan_hash_value = TO_NUMBER('&&plan_hash_value.') #');
|
||||
end;
|
||||
/
|
||||
|
||||
print rs;
|
||||
|
||||
Reference in New Issue
Block a user