Files
oracle/csierra/cs_internal/cs_sql_ash.sql

466 lines
13 KiB
MySQL
Raw Normal View History

2026-03-12 21:23:47 +01:00
COL perc FOR 990.0 HEA 'Perc%';
COL samples FOR 999,999,990 HEA 'Samples';
COL sql_plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value';
COL sql_full_plan_hash_value FOR 9999999999 HEA 'Full Plan|Hash Value';
COL sql_plan_line_id FOR 9999 HEA 'Plan|Line';
COL current_obj# FOR 999999999999 HEA 'Current|Obj#';
COL in_connection_mgmt FOR A6 HEA 'In|Connec|Mgmt';
COL in_parse FOR A6 HEA 'In|Parse';
COL in_hard_parse FOR A6 HEA 'In|Hard|Parse';
COL in_sql_execution FOR A6 HEA 'In|SQL|Exec';
COL in_plsql_execution FOR A6 HEA 'In|PLSQL|Exec';
COL in_plsql_rpc FOR A6 HEA 'In|PLSQL|RPC';
COL in_plsql_compilation FOR A6 HEA 'In|PLSQL|Compil';
COL in_java_execution FOR A6 HEA 'In|Java|Exec';
COL in_bind FOR A6 HEA 'In|Bind';
COL in_cursor_close FOR A6 HEA 'In|Cursor|Close';
COL in_sequence_load FOR A6 HEA 'In|Seq|Load';
COL on_cpu_or_wait_event FOR A50 HEA 'ON CPU or Timed Event';
COL object_name FOR A128 HEA 'Object Name';
--
COL dummy FOR A1 NOPRI;
BREAK ON dummy SKIP PAGE;
COMPUTE SUM LABEL 'TOTAL' OF perc samples ON dummy;
--
PRO
PRO ASH (v$active_session_history)
PRO ~~~
WITH
ash_detailed AS (
SELECT /*+ MATERIALIZE NO_MERGE */
100 * COUNT(*) / SUM(COUNT(*)) OVER() AS perc,
COUNT(*) AS samples,
h.sql_plan_hash_value,
h.sql_full_plan_hash_value,
h.sql_plan_line_id,
CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END AS on_cpu_or_wait_event,
h.current_obj#,
h.in_connection_mgmt,
h.in_parse,
h.in_hard_parse,
h.in_sql_execution,
h.in_plsql_execution,
h.in_plsql_rpc,
h.in_plsql_compilation,
h.in_java_execution,
h.in_bind,
h.in_cursor_close,
h.in_sequence_load
FROM v$active_session_history h
WHERE h.sql_id = '&&cs_sql_id.'
GROUP BY
h.sql_plan_hash_value,
h.sql_full_plan_hash_value,
h.sql_plan_line_id,
CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END,
h.current_obj#,
h.in_connection_mgmt,
h.in_parse,
h.in_hard_parse,
h.in_sql_execution,
h.in_plsql_execution,
h.in_plsql_rpc,
h.in_plsql_compilation,
h.in_java_execution,
h.in_bind,
h.in_cursor_close,
h.in_sequence_load
),
all_groups AS (
SELECT '1' AS dummy,
100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc,
SUM(samples) AS samples,
sql_plan_hash_value,
sql_full_plan_hash_value,
sql_plan_line_id,
on_cpu_or_wait_event,
current_obj#,
in_connection_mgmt,
in_parse,
in_hard_parse,
in_sql_execution,
in_plsql_execution,
in_plsql_rpc,
in_plsql_compilation,
in_java_execution,
in_bind,
in_cursor_close,
in_sequence_load
FROM ash_detailed
GROUP BY
sql_plan_hash_value,
sql_full_plan_hash_value,
sql_plan_line_id,
on_cpu_or_wait_event,
current_obj#,
in_connection_mgmt,
in_parse,
in_hard_parse,
in_sql_execution,
in_plsql_execution,
in_plsql_rpc,
in_plsql_compilation,
in_java_execution,
in_bind,
in_cursor_close,
in_sequence_load
UNION ALL
SELECT '2' AS dummy,
100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc,
SUM(samples) AS samples,
sql_plan_hash_value,
sql_full_plan_hash_value,
sql_plan_line_id,
on_cpu_or_wait_event,
TO_NUMBER(NULL) AS current_obj#,
in_connection_mgmt,
in_parse,
in_hard_parse,
in_sql_execution,
in_plsql_execution,
in_plsql_rpc,
in_plsql_compilation,
in_java_execution,
in_bind,
in_cursor_close,
in_sequence_load
FROM ash_detailed
GROUP BY
sql_plan_hash_value,
sql_full_plan_hash_value,
sql_plan_line_id,
on_cpu_or_wait_event,
in_connection_mgmt,
in_parse,
in_hard_parse,
in_sql_execution,
in_plsql_execution,
in_plsql_rpc,
in_plsql_compilation,
in_java_execution,
in_bind,
in_cursor_close,
in_sequence_load
UNION ALL
SELECT '3' AS dummy,
100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc,
SUM(samples) AS samples,
sql_plan_hash_value,
sql_full_plan_hash_value,
TO_NUMBER(NULL) sql_plan_line_id,
on_cpu_or_wait_event,
TO_NUMBER(NULL) AS current_obj#,
NULL in_connection_mgmt,
NULL in_parse,
NULL in_hard_parse,
NULL in_sql_execution,
NULL in_plsql_execution,
NULL in_plsql_rpc,
NULL in_plsql_compilation,
NULL in_java_execution,
NULL in_bind,
NULL in_cursor_close,
NULL in_sequence_load
FROM ash_detailed
GROUP BY
sql_plan_hash_value,
sql_full_plan_hash_value,
on_cpu_or_wait_event
UNION ALL
SELECT '4' AS dummy,
100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc,
SUM(samples) AS samples,
sql_plan_hash_value,
sql_full_plan_hash_value,
TO_NUMBER(NULL) sql_plan_line_id,
NULL on_cpu_or_wait_event,
TO_NUMBER(NULL) AS current_obj#,
NULL in_connection_mgmt,
NULL in_parse,
NULL in_hard_parse,
NULL in_sql_execution,
NULL in_plsql_execution,
NULL in_plsql_rpc,
NULL in_plsql_compilation,
NULL in_java_execution,
NULL in_bind,
NULL in_cursor_close,
NULL in_sequence_load
FROM ash_detailed
GROUP BY
sql_plan_hash_value,
sql_full_plan_hash_value
UNION ALL
SELECT '5' AS dummy,
100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc,
SUM(samples) AS samples,
TO_NUMBER(NULL) sql_plan_hash_value,
TO_NUMBER(NULL) sql_full_plan_hash_value,
TO_NUMBER(NULL) sql_plan_line_id,
on_cpu_or_wait_event,
TO_NUMBER(NULL) AS current_obj#,
NULL in_connection_mgmt,
NULL in_parse,
NULL in_hard_parse,
NULL in_sql_execution,
NULL in_plsql_execution,
NULL in_plsql_rpc,
NULL in_plsql_compilation,
NULL in_java_execution,
NULL in_bind,
NULL in_cursor_close,
NULL in_sequence_load
FROM ash_detailed
GROUP BY
on_cpu_or_wait_event
)
SELECT dummy,
perc,
samples,
sql_plan_hash_value,
sql_full_plan_hash_value,
sql_plan_line_id,
on_cpu_or_wait_event,
current_obj#,
(SELECT owner||'.'||object_name||CASE WHEN subobject_name IS NOT NULL THEN '.'||subobject_name END||' '||object_type FROM dba_objects WHERE object_id = current_obj# AND ROWNUM = 1) AS object_name,
in_connection_mgmt,
in_parse,
in_hard_parse,
in_sql_execution,
in_plsql_execution,
in_plsql_rpc,
in_plsql_compilation,
in_java_execution,
in_bind,
in_cursor_close,
in_sequence_load
FROM all_groups
WHERE perc >= 0.5
ORDER BY
1 ASC, 2 DESC, 3 DESC
/
--
PRO
PRO ASH 7d (dba_hist_active_sess_history)
PRO ~~~~~~
WITH
ash_detailed AS (
SELECT /*+ MATERIALIZE NO_MERGE */
100 * COUNT(*) / SUM(COUNT(*)) OVER() AS perc,
COUNT(*) AS samples,
h.sql_plan_hash_value,
h.sql_full_plan_hash_value,
h.sql_plan_line_id,
CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END AS on_cpu_or_wait_event,
h.current_obj#,
h.in_connection_mgmt,
h.in_parse,
h.in_hard_parse,
h.in_sql_execution,
h.in_plsql_execution,
h.in_plsql_rpc,
h.in_plsql_compilation,
h.in_java_execution,
h.in_bind,
h.in_cursor_close,
h.in_sequence_load
FROM dba_hist_active_sess_history h
WHERE h.sql_id = '&&cs_sql_id.'
AND h.dbid = TO_NUMBER('&&cs_dbid.')
AND h.instance_number = TO_NUMBER('&&cs_instance_number.')
AND h.sample_time > SYSDATE - 7
AND h.snap_id >= &&cs_7d_snap_id.
GROUP BY
h.sql_plan_hash_value,
h.sql_full_plan_hash_value,
h.sql_plan_line_id,
CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END,
h.current_obj#,
h.in_connection_mgmt,
h.in_parse,
h.in_hard_parse,
h.in_sql_execution,
h.in_plsql_execution,
h.in_plsql_rpc,
h.in_plsql_compilation,
h.in_java_execution,
h.in_bind,
h.in_cursor_close,
h.in_sequence_load
),
all_groups AS (
SELECT '1' AS dummy,
100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc,
SUM(samples) AS samples,
sql_plan_hash_value,
sql_full_plan_hash_value,
sql_plan_line_id,
on_cpu_or_wait_event,
current_obj#,
in_connection_mgmt,
in_parse,
in_hard_parse,
in_sql_execution,
in_plsql_execution,
in_plsql_rpc,
in_plsql_compilation,
in_java_execution,
in_bind,
in_cursor_close,
in_sequence_load
FROM ash_detailed
GROUP BY
sql_plan_hash_value,
sql_full_plan_hash_value,
sql_plan_line_id,
on_cpu_or_wait_event,
current_obj#,
in_connection_mgmt,
in_parse,
in_hard_parse,
in_sql_execution,
in_plsql_execution,
in_plsql_rpc,
in_plsql_compilation,
in_java_execution,
in_bind,
in_cursor_close,
in_sequence_load
UNION ALL
SELECT '2' AS dummy,
100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc,
SUM(samples) AS samples,
sql_plan_hash_value,
sql_full_plan_hash_value,
sql_plan_line_id,
on_cpu_or_wait_event,
TO_NUMBER(NULL) AS current_obj#,
in_connection_mgmt,
in_parse,
in_hard_parse,
in_sql_execution,
in_plsql_execution,
in_plsql_rpc,
in_plsql_compilation,
in_java_execution,
in_bind,
in_cursor_close,
in_sequence_load
FROM ash_detailed
GROUP BY
sql_plan_hash_value,
sql_full_plan_hash_value,
sql_plan_line_id,
on_cpu_or_wait_event,
in_connection_mgmt,
in_parse,
in_hard_parse,
in_sql_execution,
in_plsql_execution,
in_plsql_rpc,
in_plsql_compilation,
in_java_execution,
in_bind,
in_cursor_close,
in_sequence_load
UNION ALL
SELECT '3' AS dummy,
100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc,
SUM(samples) AS samples,
sql_plan_hash_value,
sql_full_plan_hash_value,
TO_NUMBER(NULL) sql_plan_line_id,
on_cpu_or_wait_event,
TO_NUMBER(NULL) AS current_obj#,
NULL in_connection_mgmt,
NULL in_parse,
NULL in_hard_parse,
NULL in_sql_execution,
NULL in_plsql_execution,
NULL in_plsql_rpc,
NULL in_plsql_compilation,
NULL in_java_execution,
NULL in_bind,
NULL in_cursor_close,
NULL in_sequence_load
FROM ash_detailed
GROUP BY
sql_plan_hash_value,
sql_full_plan_hash_value,
on_cpu_or_wait_event
UNION ALL
SELECT '4' AS dummy,
100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc,
SUM(samples) AS samples,
sql_plan_hash_value,
sql_full_plan_hash_value,
TO_NUMBER(NULL) sql_plan_line_id,
NULL on_cpu_or_wait_event,
TO_NUMBER(NULL) AS current_obj#,
NULL in_connection_mgmt,
NULL in_parse,
NULL in_hard_parse,
NULL in_sql_execution,
NULL in_plsql_execution,
NULL in_plsql_rpc,
NULL in_plsql_compilation,
NULL in_java_execution,
NULL in_bind,
NULL in_cursor_close,
NULL in_sequence_load
FROM ash_detailed
GROUP BY
sql_plan_hash_value,
sql_full_plan_hash_value
UNION ALL
SELECT '5' AS dummy,
100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc,
SUM(samples) AS samples,
TO_NUMBER(NULL) sql_plan_hash_value,
TO_NUMBER(NULL) sql_full_plan_hash_value,
TO_NUMBER(NULL) sql_plan_line_id,
on_cpu_or_wait_event,
TO_NUMBER(NULL) AS current_obj#,
NULL in_connection_mgmt,
NULL in_parse,
NULL in_hard_parse,
NULL in_sql_execution,
NULL in_plsql_execution,
NULL in_plsql_rpc,
NULL in_plsql_compilation,
NULL in_java_execution,
NULL in_bind,
NULL in_cursor_close,
NULL in_sequence_load
FROM ash_detailed
GROUP BY
on_cpu_or_wait_event
)
SELECT dummy,
perc,
samples,
sql_plan_hash_value,
sql_full_plan_hash_value,
sql_plan_line_id,
on_cpu_or_wait_event,
current_obj#,
(SELECT owner||'.'||object_name||CASE WHEN subobject_name IS NOT NULL THEN '.'||subobject_name END||' '||object_type FROM dba_objects WHERE object_id = current_obj# AND ROWNUM = 1) AS object_name,
in_connection_mgmt,
in_parse,
in_hard_parse,
in_sql_execution,
in_plsql_execution,
in_plsql_rpc,
in_plsql_compilation,
in_java_execution,
in_bind,
in_cursor_close,
in_sequence_load
FROM all_groups
WHERE perc >= 0.5
ORDER BY
1 ASC, 2 DESC, 3 DESC
/
--
CL BRE COMP;
--