2026-03-12 20:23:15
This commit is contained in:
143
vg/awr_service_waits.sql
Normal file
143
vg/awr_service_waits.sql
Normal file
@@ -0,0 +1,143 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Service Waits from AWR
|
||||
* Parameters : 1 - SERVICE_NAME (Use % as wildcard, escape with \)
|
||||
* 2 - Instance (Use % for all instances in the RAC database)
|
||||
* 3 - From timestamp (YYYY-MM-DD HH24:MI:SS format)
|
||||
* 4 - To timstamp (YYYY-MM-DD HH24:MI:SS format)
|
||||
*
|
||||
* Wait Classes are as follows:-
|
||||
* Concurrency
|
||||
* User I/O
|
||||
* System I/O
|
||||
* Administrative
|
||||
* Other
|
||||
* Configuration
|
||||
* Scheduler
|
||||
* Cluster
|
||||
* Application
|
||||
* Queueing
|
||||
* Idle
|
||||
* Network
|
||||
* Commit
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 17-May-12 Vishal Gupta Intial version
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
DEFINE service_name="&&1"
|
||||
DEFINE instance_number="&2"
|
||||
DEFINE from_timestamp="&3"
|
||||
DEFINE to_timestamp="&4"
|
||||
|
||||
DEFINE COUNT_FORMAT=999,999
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="(#)"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
DEFINE TIME_FORMAT=999,999
|
||||
DEFINE TIME_DIVIDER="1"
|
||||
DEFINE TIME_HEADING="sec"
|
||||
--DEFINE TIME_DIVIDER="1000"
|
||||
--DEFINE TIME_HEADING="1000s"
|
||||
|
||||
|
||||
DEFINE TOTAL_FORMAT=999,999,999,999
|
||||
DEFINE TOTAL_DIVIDER="1000"
|
||||
DEFINE TOTAL_HEADING="'1000"
|
||||
|
||||
COLUMN end_interval_time HEADING "SnapTime" FORMAT a15
|
||||
COLUMN service_name HEADING "ServiceName" FORMAT a25
|
||||
|
||||
COLUMN Concurrency_total_waits HEADING "Concurr|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN user_io_total_waits HEADING "UserIO|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN system_io_total_waits HEADING "SystemIO|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN application_total_waits HEADING "App|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN network_total_waits HEADING "Network|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN commit_total_waits HEADING "Commit|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN idle_total_waits HEADING "Idle|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN cluster_total_waits HEADING "Cluster|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN scheduler_total_waits HEADING "Scheduler|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN Concurrency_time_waited HEADING "Concurr|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN user_io_time_waited HEADING "UserIO|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN system_io_time_waited HEADING "SystemIO|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN application_time_waited HEADING "App|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN network_time_waited HEADING "Network|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN commit_time_waited HEADING "Commit|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN idle_time_waited HEADING "Idle|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN cluster_time_waited HEADING "Cluster|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN scheduler_time_waited HEADING "Scheduler|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
|
||||
|
||||
|
||||
WITH snap as
|
||||
(
|
||||
SELECT s.dbid
|
||||
, s.instance_number
|
||||
, s.snap_id
|
||||
, LAG (s.snap_id) OVER(PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
|
||||
, s.end_interval_time
|
||||
FROM dba_hist_snapshot s
|
||||
WHERE s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS')
|
||||
)
|
||||
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
|
||||
, swc.service_name
|
||||
-- Total Waits in centisecs
|
||||
, SUM(DECODE(swc.wait_class, 'Concurrency', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER Concurrency_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'User I/O', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER user_io_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'System I/O', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER system_io_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'Application', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER application_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'Network', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER network_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'Commit', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER commit_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'Idle', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER idle_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'Cluster', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER cluster_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'Scheduler', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER scheduler_total_waits
|
||||
-- Time Waited in centisecs
|
||||
, SUM(DECODE(swc.wait_class, 'Concurrency', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER Concurrency_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'User I/O', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER user_io_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'System I/O', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER system_io_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'Application', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER application_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'Network', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER network_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'Commit', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER commit_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'Idle', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER idle_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'Cluster', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER cluster_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'Scheduler', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER scheduler_time_waited
|
||||
FROM snap s
|
||||
, dba_hist_service_wait_class swc
|
||||
, dba_hist_service_wait_class swc_prev
|
||||
WHERE s.dbid = swc.dbid
|
||||
AND s.instance_number = swc.instance_number
|
||||
AND s.snap_id = swc.snap_id
|
||||
AND s.dbid = swc_prev.dbid
|
||||
AND s.instance_number = swc_prev.instance_number
|
||||
AND s.prev_snap_id = swc_prev.snap_id
|
||||
AND swc.service_name = swc_prev.service_name
|
||||
AND swc.wait_class = swc_prev.wait_class
|
||||
AND UPPER(swc.service_name) LIKE UPPER('&&service_name') ESCAPE '\'
|
||||
AND swc.instance_number LIKE '&&instance_number'
|
||||
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
|
||||
, swc.service_name
|
||||
ORDER BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
|
||||
, swc.service_name
|
||||
;
|
||||
|
||||
PROMPT '&&from_timestamp'
|
||||
|
||||
UNDEFINE service_name
|
||||
UNDEFINE instance_number
|
||||
UNDEFINE from_timestamp
|
||||
UNDEFINE to_timestamp
|
||||
|
||||
|
||||
@@footer
|
||||
Reference in New Issue
Block a user