2026-03-12 20:23:15
This commit is contained in:
72
csierra/cs_spbl_refresh.sql
Normal file
72
csierra/cs_spbl_refresh.sql
Normal file
@@ -0,0 +1,72 @@
|
||||
DEF 1 = 'C##IOD';
|
||||
VAR plans_to_refresh_limit NUMBER;
|
||||
EXEC :plans_to_refresh_limit := 1000;
|
||||
--
|
||||
WITH
|
||||
candidate_sql AS (
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
DISTINCT s.con_id, s.exact_matching_signature AS signature, s.sql_id, s.plan_hash_value, s.sql_plan_baseline AS plan_name, s.sql_text
|
||||
FROM v$sql s
|
||||
WHERE s.sql_plan_baseline IS NOT NULL -- a baseline exists and it is in use
|
||||
AND s.parsing_user_id > 0 -- exclude SYS
|
||||
AND s.parsing_schema_id > 0 -- exclude SYS
|
||||
AND s.parsing_schema_name NOT IN ('SYS', 'SYSTEM', 'MDSYS', 'ORDDATA', 'CTXSYS', 'WMSYS', 'DVSYS', 'XDB', 'LBACSYS', 'DBSNMP', 'GSMADMIN_INTERNAL') -- to reduce selection
|
||||
AND s.parsing_schema_name NOT LIKE 'C##%' -- to reduce selection
|
||||
AND s.parsing_schema_name NOT LIKE 'APEX%' -- to reduce selection
|
||||
AND s.plan_hash_value > 0 -- e.g.: PL/SQL has 0 on PHV
|
||||
AND s.exact_matching_signature > 0 -- INSERT from values has 0 on signature
|
||||
AND s.executions > 0
|
||||
AND s.cpu_time > 0
|
||||
AND s.buffer_gets > 0
|
||||
AND s.buffer_gets > s.executions
|
||||
AND s.object_status = 'VALID'
|
||||
AND s.is_obsolete = 'N'
|
||||
AND s.is_shareable = 'Y'
|
||||
AND s.is_bind_aware = 'N' -- to ignore cursors using adaptive cursor sharing ACS as per CHANGE-190522
|
||||
AND s.is_resolved_adaptive_plan IS NULL -- to ignore adaptive plans which cause trouble when combined with SPM
|
||||
AND s.is_reoptimizable = 'N' -- to ignore cursors which require adjustments as per cardinality feedback
|
||||
AND s.last_active_time > SYSDATE - (3/24) -- cursors has been executed within the last few hours
|
||||
-- AND NOT EXISTS (SELECT NULL FROM &&1..zapper_ignore_sql_text i WHERE UPPER(s.sql_text) LIKE UPPER('%'||i.sql_text||'%'))
|
||||
AND ROWNUM >= 1 /* MATERIALIZE NO_MERGE */
|
||||
),
|
||||
candidate_baselines AS (
|
||||
SELECT /*+ MATERIALIZE NO_MERGE OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */
|
||||
DISTINCT
|
||||
b.con_id,
|
||||
b.created,
|
||||
b.last_modified,
|
||||
b.signature,
|
||||
b.plan_name,
|
||||
b.description
|
||||
FROM cdb_sql_plan_baselines b
|
||||
WHERE b.enabled = 'YES'
|
||||
AND b.accepted = 'YES'
|
||||
AND b.created < SYSDATE - 60 -- only consider refreshing baselines older than these many days
|
||||
AND b.last_executed > SYSDATE - 7 -- only refresh a baseline if it has been executed during the last 7 days
|
||||
AND b.parsing_schema_name NOT IN ('SYS', 'SYSTEM', 'MDSYS', 'ORDDATA', 'CTXSYS', 'WMSYS', 'DVSYS', 'XDB', 'LBACSYS', 'DBSNMP', 'GSMADMIN_INTERNAL') -- to reduce selection
|
||||
AND b.parsing_schema_name NOT LIKE 'C##%' -- to reduce selection
|
||||
AND b.parsing_schema_name NOT LIKE 'APEX%' -- to reduce selection
|
||||
AND ROWNUM >= 1 /* MATERIALIZE NO_MERGE */
|
||||
)
|
||||
SELECT s.sql_id,
|
||||
c.name AS pdb_name,
|
||||
s.signature,
|
||||
s.plan_hash_value,
|
||||
s.plan_name,
|
||||
s.sql_text,
|
||||
b.created,
|
||||
b.last_modified,
|
||||
b.description
|
||||
FROM candidate_sql s,
|
||||
candidate_baselines b,
|
||||
v$containers c
|
||||
WHERE b.con_id = s.con_id
|
||||
AND b.signature = s.signature
|
||||
AND b.plan_name = s.plan_name
|
||||
AND c.con_id = s.con_id
|
||||
ORDER BY
|
||||
b.created,
|
||||
b.last_modified
|
||||
FETCH FIRST :plans_to_refresh_limit ROWS ONLY
|
||||
/
|
||||
|
||||
Reference in New Issue
Block a user