Files
oracle/csierra/cs_internal/cs_plans_mem_2.sql
2026-03-12 21:23:47 +01:00

57 lines
2.2 KiB
SQL

PRO
PRO PLANS IN MEMORY - DISPLAY (dbms_xplan.display_cursor)
PRO ~~~~~~~~~~~~~~~~~~~~~~~~~
PRO
SET HEA OFF PAGES 0;
WITH
ranked_child_cursors AS (
SELECT /*+ MATERIALIZE NO_MERGE */
s.con_id,
sql_id,
child_number,
ROW_NUMBER () OVER (PARTITION BY plan_hash_value ORDER BY
CASE
WHEN object_status = 'VALID' AND is_obsolete = 'N' AND is_shareable = 'Y' THEN 1
WHEN object_status = 'VALID' AND is_obsolete = 'N' AND is_shareable = 'N' THEN 2
WHEN object_status = 'VALID' AND is_obsolete = 'Y' THEN 3
ELSE 4
END,
last_active_time DESC) row_number,
plan_hash_value,
last_active_time,
object_status,
is_obsolete,
is_shareable,
is_bind_sensitive,
is_bind_aware,
parsing_schema_name,
c.name AS pdb_name
FROM v$sql s, v$containers c
WHERE s.sql_id = '&&cs_sql_id.'
AND ('&&cs_plan_hash_value.' IS NULL OR s.plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.'))
AND c.con_id = s.con_id
ORDER BY
s.last_active_time,
s.con_id,
s.child_number
)
SELECT CASE WHEN p.plan_table_output LIKE 'SQL_ID %'
THEN
'Last active time:'||TO_CHAR(r.last_active_time, '&&cs_datetime_full_format.')||
' '||REPLACE(REPLACE(p.plan_table_output, 'child number ', 'Child_Number:'), 'SQL_ID ', 'SQL_ID:')||
CASE WHEN r.object_status <> 'VALID' THEN ', Object_Status:'||r.object_status END||
CASE WHEN r.is_obsolete <> 'N' THEN ', Is_Obsolete' END||
CASE WHEN r.is_shareable <> 'Y' THEN ', Is_Not_Shareable' END||
CASE WHEN r.is_bind_aware = 'Y' THEN ', Is_Bind_Aware' END||
CASE WHEN r.is_bind_sensitive = 'Y' THEN ', Is_Bind_Sensitive' END||
', Con_ID:'||TRIM(TO_CHAR(r.con_id))||
', PDB_Name:'||r.pdb_name||
', Parsing_Schema:'||parsing_schema_name
ELSE p.plan_table_output
END AS plan_table_output
FROM ranked_child_cursors r,
TABLE(DBMS_XPLAN.display_cursor(r.sql_id, r.child_number, 'ADVANCED ALLSTATS LAST')) p
WHERE r.row_number <= 3 -- up to N most recently active child cursors per plan_hash_value
/
SET HEA ON PAGES 100;
--