2026-03-12 20:23:15
This commit is contained in:
265
vg/statspack_consolidation_purge.sql
Normal file
265
vg/statspack_consolidation_purge.sql
Normal file
@@ -0,0 +1,265 @@
|
||||
DECLARE
|
||||
lv_sql VARCHAR2(4000);
|
||||
v_env_type VARCHAR2(30) := '&&1';
|
||||
v_db_version VARCHAR2(30) := '&2';
|
||||
v_instance VARCHAR2(30) := '&3';
|
||||
BEGIN
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('###########################################');
|
||||
DBMS_OUTPUT.PUT_LINE('Job Started at ' || to_char(sysdate,'DD-MON-YYYY hh24:MI:SS') );
|
||||
|
||||
|
||||
FOR i in (SELECT DISTINCT dbid
|
||||
, c.database
|
||||
, instance_number
|
||||
, c.keep_days
|
||||
FROM stats$database_instance i
|
||||
, perfstat_control.statspack_merge_control c
|
||||
WHERE c.database = i.db_name
|
||||
AND c.database = NVL(v_instance,c.database)
|
||||
AND c.version = v_db_version
|
||||
AND c.purge_active = 'Y')
|
||||
LOOP
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('------------------------------------------------');
|
||||
DBMS_OUTPUT.PUT_LINE(i.database || to_char(sysdate,'DD-MON-YYYY hh24:MI:SS'));
|
||||
|
||||
/*--------------------------------------------------------
|
||||
Delete all snapshots except for midnight ones older thans keep_days
|
||||
retain all midnight snapshots
|
||||
----------------------------------------------------------*/
|
||||
DELETE
|
||||
FROM stats$snapshot
|
||||
WHERE dbid = i.dbid
|
||||
AND instance_number = i.instance_number
|
||||
AND snap_time < sysdate - i.keep_days
|
||||
AND to_char(snap_time,'HH24MI') NOT between '0000' and '0010'
|
||||
;
|
||||
|
||||
commit;
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------
|
||||
Delete all SQL captured which are below set threshold
|
||||
This manual cleanup is required in historical data in case thresholds
|
||||
have been increased to reduce the SQLs captured.
|
||||
-----------------------------------------------------------------------*/
|
||||
if v_db_version = '9.2'
|
||||
then
|
||||
|
||||
lv_sql := 'DELETE FROM stats$sql_summary
|
||||
WHERE(snap_id, dbid, instance_number, hash_value, text_subset) IN
|
||||
(SELECT ss.snap_id,
|
||||
ss.dbid,
|
||||
ss.instance_number,
|
||||
ss.hash_value,
|
||||
ss.text_subset
|
||||
FROM stats$sql_summary ss,
|
||||
stats$statspack_parameter sp
|
||||
WHERE ss.dbid = sp.dbid
|
||||
AND ss.instance_number = sp.instance_number
|
||||
AND ss.dbid = ' || i.dbid || '
|
||||
AND ss.instance_number = ' || i.instance_number || '
|
||||
AND ss.executions < sp.executions_th *1
|
||||
AND ss.parse_calls < sp.parse_calls_th *1
|
||||
AND ss.disk_reads < sp.disk_reads_th *1
|
||||
AND ss.buffer_gets < sp.buffer_gets_th *1
|
||||
AND ss.sharable_mem < sp.sharable_mem_th *1
|
||||
AND ss.version_count < sp.version_count_th *1)
|
||||
';
|
||||
|
||||
EXECUTE IMMEDIATE lv_sql;
|
||||
COMMIT;
|
||||
|
||||
lv_sql := 'DELETE /*+ index(spu )*/
|
||||
FROM stats$sql_plan_usage spu
|
||||
WHERE NOT EXISTS
|
||||
(SELECT 1
|
||||
FROM stats$sql_summary ss
|
||||
WHERE ss.dbid = spu.dbid
|
||||
AND ss.instance_number = spu.instance_number
|
||||
AND ss.dbid = ' || i.dbid || '
|
||||
AND ss.instance_number = ' || i.instance_number || '
|
||||
AND ss.snap_id = spu.snap_id
|
||||
AND ss.hash_value = spu.hash_value
|
||||
AND ss.text_subset = spu.text_subset)
|
||||
';
|
||||
|
||||
EXECUTE IMMEDIATE lv_sql;
|
||||
COMMIT;
|
||||
|
||||
end if; -- 9i
|
||||
|
||||
|
||||
if v_db_version = '10.2'
|
||||
then
|
||||
|
||||
lv_sql := 'DELETE FROM stats$sql_summary
|
||||
WHERE(snap_id, dbid, instance_number, old_hash_value, text_subset) IN
|
||||
(SELECT ss.snap_id,
|
||||
ss.dbid,
|
||||
ss.instance_number,
|
||||
ss.old_hash_value,
|
||||
ss.text_subset
|
||||
FROM stats$sql_summary ss,
|
||||
stats$statspack_parameter sp
|
||||
WHERE ss.dbid = sp.dbid
|
||||
AND ss.instance_number = sp.instance_number
|
||||
AND ss.dbid = ' || i.dbid || '
|
||||
AND ss.instance_number = ' || i.instance_number || '
|
||||
AND ss.executions < sp.executions_th *1
|
||||
AND ss.parse_calls < sp.parse_calls_th *1
|
||||
AND ss.disk_reads < sp.disk_reads_th *1
|
||||
AND ss.buffer_gets < sp.buffer_gets_th *1
|
||||
AND ss.sharable_mem < sp.sharable_mem_th *1
|
||||
AND ss.version_count < sp.version_count_th *1)
|
||||
';
|
||||
|
||||
EXECUTE IMMEDIATE lv_sql;
|
||||
COMMIT;
|
||||
|
||||
lv_sql := 'DELETE /*+ index(spu )*/
|
||||
FROM stats$sql_plan_usage spu
|
||||
WHERE NOT EXISTS
|
||||
(SELECT 1
|
||||
FROM stats$sql_summary ss
|
||||
WHERE ss.dbid = spu.dbid
|
||||
AND ss.instance_number = spu.instance_number
|
||||
AND ss.dbid = ' || i.dbid || '
|
||||
AND ss.instance_number = ' || i.instance_number || '
|
||||
AND ss.snap_id = spu.snap_id
|
||||
AND ss.old_hash_value = spu.old_hash_value
|
||||
AND ss.text_subset = spu.text_subset)
|
||||
';
|
||||
|
||||
EXECUTE IMMEDIATE lv_sql;
|
||||
COMMIT;
|
||||
|
||||
end if; -- 10g
|
||||
|
||||
END LOOP;
|
||||
|
||||
|
||||
-- if iextended_purge then
|
||||
--
|
||||
-- Purge segments which do not have RI constraints to stats$snapshot
|
||||
|
||||
if v_db_version = '9.2'
|
||||
then
|
||||
|
||||
--
|
||||
-- SQL text
|
||||
--
|
||||
lv_sql := 'delete from stats$sqltext st1
|
||||
where (st1.hash_value, st1.text_subset) in
|
||||
(select /*+ index_ffs(st) */
|
||||
st.hash_value, st.text_subset
|
||||
from stats$sqltext st
|
||||
where (hash_value, text_subset) not in
|
||||
(select /*+ hash_aj index_ffs(ss) */
|
||||
distinct hash_value, text_subset
|
||||
from stats$sql_summary ss
|
||||
)
|
||||
and st.piece = 0
|
||||
)';
|
||||
EXECUTE IMMEDIATE lv_sql;
|
||||
commit;
|
||||
|
||||
--
|
||||
-- SQL execution plans
|
||||
--
|
||||
lv_sql := 'delete from stats$sql_plan sp1
|
||||
where sp1.plan_hash_value in
|
||||
(select /*+ index_ffs(sp) */
|
||||
sp.plan_hash_value
|
||||
from stats$sql_plan sp
|
||||
where plan_hash_value not in
|
||||
(select /*+ hash_aj */
|
||||
distinct plan_hash_value
|
||||
from stats$sql_plan_usage spu
|
||||
)
|
||||
and sp.id = 0
|
||||
)';
|
||||
EXECUTE IMMEDIATE lv_sql;
|
||||
commit;
|
||||
|
||||
|
||||
--
|
||||
-- Segment Identifiers
|
||||
--
|
||||
lv_sql := 'delete /*+ index_ffs(sso) */
|
||||
from stats$seg_stat_obj sso
|
||||
where (dbid, dataobj#, obj#, ts#) not in
|
||||
(select /*+ hash_aj full(ss) */
|
||||
dbid, dataobj#, obj#, ts#
|
||||
from stats$seg_stat ss
|
||||
)';
|
||||
EXECUTE IMMEDIATE lv_sql;
|
||||
commit;
|
||||
|
||||
end if; -- is it 9i
|
||||
|
||||
|
||||
if v_db_version = '10.2'
|
||||
then
|
||||
|
||||
--
|
||||
-- SQL Text
|
||||
--
|
||||
lv_sql:= 'delete from stats$sqltext st1
|
||||
where (st1.old_hash_value, st1.text_subset) in
|
||||
(select /*+ index_ffs(st) */
|
||||
st.old_hash_value, st.text_subset
|
||||
from stats$sqltext st
|
||||
where (old_hash_value, text_subset) not in
|
||||
(select /*+ hash_aj index_ffs(ss) */
|
||||
distinct old_hash_value, text_subset
|
||||
from stats$sql_summary ss
|
||||
)
|
||||
and st.piece = 0
|
||||
)';
|
||||
EXECUTE IMMEDIATE lv_sql;
|
||||
commit;
|
||||
|
||||
--
|
||||
-- SQL execution plans
|
||||
--
|
||||
lv_sql := 'delete from stats$sql_plan sp1
|
||||
where sp1.plan_hash_value in
|
||||
(select /*+ index_ffs(sp) */
|
||||
sp.plan_hash_value
|
||||
from stats$sql_plan sp
|
||||
where plan_hash_value not in
|
||||
(select /*+ hash_aj */
|
||||
distinct plan_hash_value
|
||||
from stats$sql_plan_usage spu
|
||||
)
|
||||
and sp.id = 0
|
||||
)';
|
||||
EXECUTE IMMEDIATE lv_sql;
|
||||
commit;
|
||||
|
||||
|
||||
--
|
||||
-- Segment Identifiers
|
||||
--
|
||||
lv_sql := 'delete /*+ index_ffs(sso) */
|
||||
from stats$seg_stat_obj sso
|
||||
where (dbid, dataobj#, obj#, ts#) not in
|
||||
(select /*+ hash_aj full(ss) */
|
||||
dbid, dataobj#, obj#, ts#
|
||||
from stats$seg_stat ss
|
||||
)';
|
||||
EXECUTE IMMEDIATE lv_sql;
|
||||
commit;
|
||||
|
||||
end if; -- Is it 10g
|
||||
|
||||
-- end if; -- extended purge
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('###########################################');
|
||||
DBMS_OUTPUT.PUT_LINE('Job Finished at ' || to_char(sysdate,'DD-MON-YYYY hh24:MI:SS') );
|
||||
|
||||
END;
|
||||
/
|
||||
|
||||
Reference in New Issue
Block a user