2026-03-12 20:23:15
This commit is contained in:
117
vg/ash_top_services_breakdown.sql
Normal file
117
vg/ash_top_services_breakdown.sql
Normal file
@@ -0,0 +1,117 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display top activity from ASH
|
||||
* Parameters : 1 - Number of MINUTES (Default 5min)
|
||||
* 2 - Top Row Count (Default 5 rows)
|
||||
* 3 - INST_ID (Default %)
|
||||
* 3 - TO_MINUTES (Default 0min)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 02-Apr-13 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE FROM_MINUTES
|
||||
UNDEFINE TOPROWCOUNT
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE TO_MINUTES
|
||||
|
||||
DEFINE FROM_MINUTES="&&1"
|
||||
DEFINE TOPROWCOUNT="&&2"
|
||||
DEFINE INST_ID='&&3'
|
||||
DEFINE TO_MINUTES="&&4"
|
||||
|
||||
|
||||
set term off
|
||||
COLUMN _FROM_MINUTES NEW_VALUE FROM_MINUTES NOPRINT
|
||||
COLUMN _TO_MINUTES NEW_VALUE TO_MINUTES NOPRINT
|
||||
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
|
||||
SELECT DECODE('&&FROM_MINUTES','','5','&&FROM_MINUTES') "_FROM_MINUTES"
|
||||
, DECODE('&&TO_MINUTES','','0','&&TO_MINUTES') "_TO_MINUTES"
|
||||
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
|
||||
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
from dual;
|
||||
|
||||
set term on
|
||||
|
||||
PROMPT *****************************************************************
|
||||
PROMPT * ASH - Top &&TOPROWCOUNT Active Services (Over Last &&FROM_MINUTES min)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Minutes = '&&FROM_MINUTES'
|
||||
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
|
||||
PROMPT * - Instance ID = '&&INST_ID'
|
||||
PROMPT * - To Minutes = '&&TO_MINUTES'
|
||||
PROMPT *****************************************************************
|
||||
|
||||
|
||||
COLUMN service_name HEADING "ServiceName" FORMAT a30
|
||||
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
|
||||
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
|
||||
|
||||
WITH ash_session_summary AS
|
||||
(
|
||||
select TRUNC(ash.sample_time,'MI') sample_time
|
||||
, s.name service_name
|
||||
, count(1) session_count
|
||||
from gv$active_session_history ash
|
||||
JOIN dba_services s ON s.name_hash = ash.service_hash
|
||||
where 1=1
|
||||
AND s.name NOT IN ('SYS$BACKGROUND')
|
||||
--and s.name = 'pr01pimi_sas_con'
|
||||
and ash.sample_time > sysdate - (1/24)
|
||||
group by TRUNC(ash.sample_time,'MI'), s.name
|
||||
)
|
||||
, ash_rank AS
|
||||
(
|
||||
SELECT service_name
|
||||
, RANK() OVER (ORDER BY SUM(session_count) desc) rank
|
||||
FROM ash_session_summary
|
||||
GROUP BY service_name
|
||||
)
|
||||
, graph_unit AS
|
||||
(
|
||||
SELECT GREATEST(CEIL(MAX(SUM(session_count))/100),1) divider
|
||||
FROM ash_session_summary
|
||||
GROUP BY sample_time
|
||||
)
|
||||
SELECT a.sample_time
|
||||
, MAX(DECODE(r.rank,1,a.service_name,' ')) rank1_service
|
||||
, MAX(DECODE(r.rank,2,a.service_name,' ')) rank2_service
|
||||
, MAX(DECODE(r.rank,3,a.service_name,' ')) rank3_service
|
||||
, MAX(DECODE(r.rank,4,a.service_name,' ')) rank4_service
|
||||
, SUM(DECODE(r.rank,1,a.session_count,0)) rank1
|
||||
, SUM(DECODE(r.rank,2,a.session_count,0)) rank2
|
||||
, SUM(DECODE(r.rank,3,a.session_count,0)) rank3
|
||||
, SUM(DECODE(r.rank,4,a.session_count,0)) rank4
|
||||
, SUM(CASE WHEN r.rank >= 5 THEN a.session_count ELSE 0 END) rank_others
|
||||
, TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,1,a.session_count,0))/g.divider),'#'))
|
||||
|| TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,2,a.session_count,0))/g.divider),'%'))
|
||||
|| TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,3,a.session_count,0))/g.divider),'&'))
|
||||
|| TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,4,a.session_count,0))/g.divider),'^'))
|
||||
|| TRIM(RPAD(' ',ROUND(SUM(CASE WHEN r.rank >= 5 THEN a.session_count ELSE 0 END)/g.divider),'*'))
|
||||
Graph
|
||||
FROM ash_session_summary a
|
||||
JOIN ash_rank r ON r.service_name = a.service_name
|
||||
JOIN graph_unit g on g.divider >= 1
|
||||
WHERE 1=1
|
||||
GROUP BY a.sample_time, g.divider
|
||||
ORDER BY a.sample_Time
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
@@footer
|
||||
Reference in New Issue
Block a user