-
Notifications
You must be signed in to change notification settings - Fork 30
/
busiest_statspack.sql
81 lines (81 loc) · 4.34 KB
/
busiest_statspack.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
REM ================================================================================
REM Name: busiest_statspack.sql
REM Type: Oracle SQL script
REM Date: 27-April 2020
REM From: Americas Customer Success team (CSU) - Microsoft
REM
REM Copyright and license:
REM
REM Licensed under the Apache License, Version 2.0 (the "License"); you may
REM not use this file except in compliance with the License.
REM
REM You may obtain a copy of the License at
REM
REM http://www.apache.org/licenses/LICENSE-2.0
REM
REM Unless required by applicable law or agreed to in writing, software
REM distributed under the License is distributed on an "AS IS" basis,
REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
REM
REM See the License for the specific language governing permissions and
REM limitations under the License.
REM
REM Copyright (c) 2020 by Microsoft. All rights reserved.
REM
REM Ownership and responsibility:
REM
REM This script is offered without warranty by Microsoft Customer Engineering.
REM Anyone using this script accepts full responsibility for use, effect,
REM and maintenance. Please do not contact Microsoft or Oracle support unless
REM there is a problem with a supported SQL or SQL*Plus command.
REM
REM Description:
REM
REM SQL*Plus script to find the top 5 busiest STATSPACK snapshots within the horizon
REM of all information stored within the Oracle STATSPACK repository, based on the
REM STATSPACK statistic "CPU used by this session" and the two I/O statistics
REM "physical reads" and "physical writes", all residing within the STATSPACK
REM table named STATS$SYSSTAT, populated from the view V$SYSSTAT.
REM
REM Modifications:
REM TGorman 09jan23 v0.6 copied from script "busiest_awr.sql" v0.6
REM TGorman 13feb23 v0.7 bug fix, change DBA_HIST_SNAPSHOT to STATS$SNAPSHOT
REM ================================================================================
set pages 100 lines 180 verify off echo off feedback 6 timing off recsep off
col instance_number format 90 heading 'I#'
col snap_id heading 'Beginning|Snap ID'
col begin_tm format a20 heading 'Beginning|Snap Time' word_wrap
col avg_value heading 'Average|IO and CPU|per second' format 999,999,990.0000
define V_CPU_WEIGHT=1 /* multiplicative factor to favor/disfavor CPU metrics */
define V_IO_WEIGHT=2 /* multiplicative factor to favor/disfavor I/O metrics */
spool b
select x.instance_number,
x.snap_id snap_id,
to_char(s.snap_time, 'DD-MON-YYYY HH24:MI:SS') begin_tm,
x.avg_value
from (select instance_number, snap_id, avg_value,
row_number() over (partition by instance_number order by avg_sort_value desc) rn
from (select instance_number, snap_id, avg(value) avg_value, avg(sort_value) avg_sort_value
from (select instance_number, snap_id, sum(value)-sum(lag_value) value, ((sum(value)-sum(lag_value))*&&V_CPU_WEIGHT) sort_value
from (select instance_number, snap_id, value, lag(value) over (partition by instance_number order by snap_id) lag_value
from stats$sysstat
where name in ('CPU used by this session')
and dbid = (select dbid from v$database))
where lag_value is not null
group by instance_number, snap_id
union all
select instance_number, snap_id, sum(value)-sum(lag_value) value, ((sum(value)-sum(lag_value))*&&V_IO_WEIGHT) sort_value
from (select instance_number, snap_id, value, lag(value) over (partition by instance_number, name order by snap_id) lag_value
from stats$sysstat
where name in ('physical reads','physical writes')
and dbid = (select dbid from v$database))
where lag_value is not null
group by instance_number, snap_id)
group by instance_number, snap_id)) x,
Stats$snapshot s
where s.snap_id = x.snap_id
and s.instance_number = x.instance_number
and s.dbid = (select dbid from v$database)
and x.rn <= 5
order by instance_number, rn;
spool off