2026-03-12 20:23:15
This commit is contained in:
174
vg/awr_loadprofile.sql
Normal file
174
vg/awr_loadprofile.sql
Normal file
@@ -0,0 +1,174 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display load profile from AWR
|
||||
* All figures delta between two consecutive snapshots
|
||||
* Parameter : 1 - InstanceNumber (Use % for all instances)
|
||||
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 04-Apr-12 Vishal Gupta Intial version
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE TO_TIMESTAMP
|
||||
|
||||
DEFINE INST_ID="&&1"
|
||||
DEFINE FROM_TIMESTAMP="&2"
|
||||
DEFINE TO_TIMESTAMP="&3"
|
||||
|
||||
COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT
|
||||
COLUMN _TO_TIMESTAMP NEW_VALUE TO_TIMESTAMP NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
, DECODE('&&FROM_TIMESTAMP','',to_char(sysdate - 1,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP"
|
||||
, DECODE('&&TO_TIMESTAMP','',to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIMESTAMP"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE SNAP_TIME_FORMAT="YYYY-MM-DD HH24:MI:SS"
|
||||
|
||||
DEFINE COUNT_FORMAT="9,999,999"
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="'000s"
|
||||
--DEFINE COUNT_DIVIDER="1000000"
|
||||
--DEFINE COUNT_HEADING="'000,000s"
|
||||
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
--DEFINE TIME_DIVIDER="1"
|
||||
--DEFINE TIME_HEADING="sec"
|
||||
DEFINE TIME_DIVIDER="60"
|
||||
DEFINE TIME_HEADING="min"
|
||||
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ####################################################################################
|
||||
PROMPT # L O A D P R O F I L E T R E N D
|
||||
PROMPT #
|
||||
PROMPT # From AWR Repository
|
||||
PROMPT # - For Instance ID - &INST_ID
|
||||
PROMPT # - From Time - &&FROM_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
|
||||
PROMPT # - To Time - &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
|
||||
PROMPT ####################################################################################
|
||||
|
||||
|
||||
COLUMN end_interval_time HEADING "Snap Time|(&&SNAP_TIME_FORMAT)" FORMAT a22
|
||||
COLUMN cpu_time HEADING "CPU|Time|(&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN redo_size HEADING "RedoSize|(&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN logical_reads HEADING "Logical|Reads|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN block_changes HEADING "Block|Changes|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN phy_read_bytes HEADING "Physical|Read|(&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN phy_write_bytes HEADING "Physical|Write|(&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN phy_reads HEADING "Physical|Reads|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN phy_writes HEADING "Physical|Writes|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN user_calls HEADING "User|Calls|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN parses HEADING "Parses|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN hard_parses_reads HEADING "Hard|Parses|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN sorts_mem HEADING "Sorts|Memory|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN sorts_disk HEADING "Sorts|Disk|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN logons HEADING "Logons|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN commits HEADING "Commits|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN rollbacks HEADING "Rollbacks|(&COUNT_HEADING)" FORMAT &&COUNT_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
|
||||
, v$database d
|
||||
WHERE s.dbid = d.dbid
|
||||
AND s.instance_number LIKE '&&INST_ID'
|
||||
AND 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 /*+ USE_NL(s ss ss_prev) */
|
||||
TO_CHAR(s.end_interval_time,'&&SNAP_TIME_FORMAT') end_interval_time
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'CPU used by this session', ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/100/&TIME_DIVIDER)))) cpu_time
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'redo size' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&BYTES_DIVIDER)))) redo_size
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'session logical reads', ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) logical_reads
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'db block changes' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) block_changes
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'physical read total bytes' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&BYTES_DIVIDER)))) phy_read_bytes
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'physical write total bytes', ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&BYTES_DIVIDER)))) phy_write_bytes
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'physical reads' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) phy_reads
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'physical writes' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) phy_writes
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'user calls' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) user_calls
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'parse count (total)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) parses
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'parse count (hard)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) hard_parses_reads
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'sorts (memory)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) sorts_mem
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'sorts (disk)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) sorts_disk
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'logons cumulative' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) logons
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'user commits' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) commits
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'user rollbacks' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) rollbacks
|
||||
FROM snap s
|
||||
, dba_hist_sysstat ss
|
||||
, dba_hist_sysstat ss_prev
|
||||
where s.prev_snap_id IS NOT NULL
|
||||
and s.dbid = ss_prev.dbid
|
||||
and s.instance_number = ss_prev.instance_number
|
||||
and s.prev_snap_id = ss_prev.snap_id
|
||||
and s.dbid = ss.dbid
|
||||
and s.instance_number = ss.instance_number
|
||||
and s.snap_id = ss.snap_id
|
||||
and ss_prev.stat_name = ss.stat_name
|
||||
and ss.stat_name in (
|
||||
'redo size'
|
||||
,'session logical reads'
|
||||
,'db block changes'
|
||||
,'physical reads'
|
||||
,'physical read total bytes'
|
||||
,'physical read bytes'
|
||||
,'physical writes'
|
||||
,'physical write total bytes'
|
||||
,'physical write bytes'
|
||||
,'user calls'
|
||||
,'parse count (total)'
|
||||
,'parse count (hard)'
|
||||
,'sorts (memory)'
|
||||
,'sorts (disk)'
|
||||
,'logons cumulative'
|
||||
,'execute count'
|
||||
,'user commits'
|
||||
,'user rollbacks'
|
||||
,'CPU used by this session'
|
||||
)
|
||||
GROUP BY TO_CHAR(s.end_interval_time,'&&SNAP_TIME_FORMAT')
|
||||
ORDER BY TO_CHAR(s.end_interval_time,'&&SNAP_TIME_FORMAT') asc
|
||||
/
|
||||
|
||||
|
||||
@@footer
|
||||
Reference in New Issue
Block a user