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

120 lines
5.1 KiB
SQL

@@header
set term off
/*
*
* Author : Vishal Gupta
* Purpose : Display load profile from STATSPACK
* All figures delta between two consecutive snapshots
*
* Syntax : @file_name <no_of_days> [dbid] [instancenumber]
*
* dbid and instancenumber are optional.
* If not passes then it takes current instance's dbid and instancenumber
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 02-Jun-07 Vishal Gupta First Draft
*
*/
set term on
DEFINE days="&&1"
DEFINE DBID="&&2"
DEFINE INSTANCE_NUMBER="&&3"
set echo off
set verify off
set pages 10000
set lines 150
TTITLE CENTER "L O A D P R O F I L E T R E N D" -
SKIP 1 CENTER "###################################" -
SKIP 3 CENTER ""
COLUMN snap_id HEADING "Snap#" FORMAT 999999
COLUMN snap_time HEADING "Snap Time" FORMAT a17
COLUMN elapsed_sec HEADING "Elap|(Sec)" FORMAT 999,999
COLUMN redo_size HEADING "Redo|Size|(KB)" FORMAT 9,999,999
COLUMN logical_reads HEADING "Logical|Reads|(K Blocks)" FORMAT 9,999,999,999
COLUMN block_changes HEADING "Block|Changes|(K)" FORMAT 9,999,999
COLUMN phy_reads HEADING "Phy|Reads|(K Blocks)" FORMAT 9,999,999
COLUMN phy_writes HEADING "Phy|Writes|(K Blocks)" FORMAT 9,999,999
COLUMN user_calls HEADING "User|Calls|('000s)" FORMAT 9,999
COLUMN parses HEADING "Parses|('000s)" FORMAT 9,999
COLUMN hard_parses_reads HEADING "Hard|Parses|('000s)" FORMAT 99,999
COLUMN sorts_mem HEADING "Sorts#|(Mem)|('000s)" FORMAT 99,999
COLUMN sorts_disk HEADING "Sorts#|(Disk)|('000s)" FORMAT 99,999
COLUMN logons HEADING "Logons" FORMAT 9,999
COLUMN commit HEADING "Commits" FORMAT 99,999
COLUMN rollback HEADING "Rollbacks" FORMAT 99,999
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.snap_time
, (s.snap_time - LAG (s.snap_time) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) ) *1440 * 60 elapsed_sec
FROM stats$snapshot s
, v$database d
, v$instance i
WHERE s.dbid = NVL(&&DBID,d.dbid)
AND s.instance_number = NVL(&&INSTANCE_NUMBER, i.instance_number)
AND s.snap_time > sysdate - &&days
and s.snap_id > 40000
-- and to_char(s1.snap_time,'HH24') = '08'
)
SELECT /*+ USE_NL(s1,s2,ss1,ss2) */
s1.snap_id
, TO_CHAR(s1.snap_time,'dd-mm-yy hh24:mi:ss') snap_time
-- , s1.elapsed_sec
, ROUND(MAX(DECODE(ss2.name, 'redo size', ROUND ((ss2.value - ss1.value)) ) ) / 1024) redo_size
, ROUND(MAX(DECODE(ss2.name, 'session logical reads', ROUND ((ss2.value - ss1.value)/1024)))) logical_reads
, ROUND(MAX(DECODE(ss2.name, 'db block changes', ROUND ((ss2.value - ss1.value)/1024)))) block_changes
, ROUND(MAX(DECODE(ss2.name, 'physical reads', ROUND ((ss2.value - ss1.value)/1024)))) phy_reads
, ROUND(MAX(DECODE(ss2.name, 'physical writes', ROUND ((ss2.value - ss1.value)/1024)))) phy_writes
, ROUND(MAX(DECODE(ss2.name, 'user calls', ROUND ((ss2.value - ss1.value)/1000)))) user_calls
, ROUND(MAX(DECODE(ss2.name, 'parse count (total)', ROUND ((ss2.value - ss1.value)/1000)))) parses
, ROUND(MAX(DECODE(ss2.name, 'parse count (hard)', ROUND ((ss2.value - ss1.value)/1000)))) hard_parses_reads
, ROUND(MAX(DECODE(ss2.name, 'sorts (memory)', ROUND ((ss2.value - ss1.value)/1000)))) sorts_mem
, ROUND(MAX(DECODE(ss2.name, 'sorts (disk)', ROUND ((ss2.value - ss1.value)/1000)))) sorts_disk
, ROUND(MAX(DECODE(ss2.name, 'logons cumulative', ROUND ((ss2.value - ss1.value))))) logons
, ROUND(MAX(DECODE(ss2.name, 'user commits', ROUND ((ss2.value - ss1.value))))) commit
, ROUND(MAX(DECODE(ss2.name, 'user rollbacks', ROUND ((ss2.value - ss1.value))))) rollback
FROM snap s1
, stats$sysstat ss1
, stats$sysstat ss2
where s1.dbid = ss1.dbid
and s1.instance_number = ss1.instance_number
and s1.prev_snap_id = ss1.snap_id
and s1.dbid = ss2.dbid
and s1.instance_number = ss2.instance_number
and s1.snap_id = ss2.snap_id
and ss1.name = ss2.name
and ss2.name in ('redo size'
,'session logical reads'
,'db block changes'
,'physical reads'
,'physical writes'
,'user calls'
,'parse count (total)'
,'parse count (hard)'
,'sorts (memory)'
,'sorts (disk)'
,'logons cumulative'
,'execute count'
,'user commits'
,'user rollbacks'
)
and elapsed_sec > 0
GROUP BY s1.snap_id
, s1.snap_time
, elapsed_sec
order by s1.snap_time asc
/
@@footer