Files
oracle/vg/awr_loadprofile.sql
2026-03-12 21:23:47 +01:00

175 lines
8.4 KiB
SQL

@@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