oracle数据库 时间段,oracle实用sql(11)--收集一周各时段的load profile

工作中需要对近一周每小时的db time,db cpu,logical read,physical  read,transactions等信息做成EXCEL图表的形式,如果这些数据从awr报告中一个一个产生来收集就有些浪费时间了.

可以通过以下查询,直接获取数据库各实例中按默认快照间隔的load profile,然后将查询结果粘贴到EXCEL中来形成图表。

select f.instance_number,

f.stat_name,

to_char(f.END_INTERVAL_TIME, 'yyyy-mm-dd hh24:mi:ss') b_time,

to_char(g.END_INTERVAL_TIME, 'yyyy-mm-dd hh24:mi:ss') e_time,

(g.value - f.value) / 1000000 value_sum,

EXTRACT(DAY FROM g.end_interval_time - f.END_INTERVAL_TIME) * 86400 +

EXTRACT(HOUR FROM g.end_interval_time - f.END_INTERVAL_TIME) * 3600 +

EXTRACT(MINUTE FROM g.end_interval_time - f.END_INTERVAL_TIME) * 60 +

EXTRACT(SECOND FROM g.end_interval_time - f.END_INTERVAL_TIME) elapsed_second,

(g.value - f.value) / 1000000 /

(EXTRACT(DAY FROM g.end_interval_time - f.END_INTERVAL_TIME) * 86400 +

EXTRACT(HOUR FROM g.end_interval_time - f.END_INTERVAL_TIME) * 3600 +

EXTRACT(MINUTE FROM g.end_interval_time - f.END_INTERVAL_TIME) * 60 +

EXTRACT(SECOND FROM g.end_interval_time - f.END_INTERVAL_TIME)) value_per_sec

from (select a.instance_number,

a.snap_id b_snap_id,

lead(a.snap_id, 1, 0) over(partition by a.instance_number, stat_name order by a.snap_id) e_snap_id,

a.stat_name,

a.value,

b.end_interval_time

from DBA_HIST_SYS_TIME_MODEL a, dba_hist_snapshot b

where a.snap_id = b.snap_id

and a.instance_number = b.instance_number

and a.stat_name in ('DB time', 'DB CPU')

and b.begin_interval_time >= trunc(sysdate - 7)

and b.begin_interval_time <= trunc(sysdate)) f,

(select a.instance_number,

lag(a.snap_id, 1, 0) over(partition by a.instance_number, stat_name order by a.snap_id) b_snap_id,

a.snap_id e_snap_id,

a.stat_name,

a.value,

b.end_interval_time

from DBA_HIST_SYS_TIME_MODEL a, dba_hist_snapshot b

where a.snap_id = b.snap_id

and a.instance_number = b.instance_number

and a.stat_name in ('DB time', 'DB CPU')

and b.begin_interval_time >= trunc(sysdate - 7)

and b.begin_interval_time <= trunc(sysdate)) g

where g.e_snap_id != 0

and f.b_snap_id != 0

and f.instance_number = g.instance_number

and f.stat_name = g.stat_name

and f.b_snap_id = g.b_snap_id

and f.e_snap_id = g.e_snap_id

union all

select f.instance_number,

f.stat_name,

to_char(f.END_INTERVAL_TIME, 'yyyy-mm-dd hh24:mi:ss') b_time,

to_char(g.END_INTERVAL_TIME, 'yyyy-mm-dd hh24:mi:ss') e_time,

(g.value - f.value)  value_sum,

EXTRACT(DAY FROM g.end_interval_time - f.END_INTERVAL_TIME) * 86400 +

EXTRACT(HOUR FROM g.end_interval_time - f.END_INTERVAL_TIME) * 3600 +

EXTRACT(MINUTE FROM g.end_interval_time - f.END_INTERVAL_TIME) * 60 +

EXTRACT(SECOND FROM g.end_interval_time - f.END_INTERVAL_TIME) elapsed_second,

(g.value - f.value) /

(EXTRACT(DAY FROM g.end_interval_time - f.END_INTERVAL_TIME) * 86400 +

EXTRACT(HOUR FROM g.end_interval_time - f.END_INTERVAL_TIME) * 3600 +

EXTRACT(MINUTE FROM g.end_interval_time - f.END_INTERVAL_TIME) * 60 +

EXTRACT(SECOND FROM g.end_interval_time - f.END_INTERVAL_TIME)) value_per_sec

from (select a.instance_number,

a.snap_id b_snap_id,

lead(a.snap_id, 1, 0) over(partition by a.instance_number, stat_name order by a.snap_id) e_snap_id,

a.stat_name,

a.value,

b.end_interval_time

from DBA_HIST_SYSSTAT a, dba_hist_snapshot b

where a.snap_id = b.snap_id

and a.instance_number = b.instance_number

and a.stat_name in ('redo size',

'session logical reads',

'db block changes',

'physical reads',

'physical writes',

'user calls',

'parse count (total)',

'parse count (hard)',

'sorts (memory)',

'logons cumulative',

'execute count',

'user commits',

'user rollbacks')

and b.begin_interval_time >= trunc(sysdate - 7)

and b.begin_interval_time <= trunc(sysdate)) f,

(select a.instance_number,

lag(a.snap_id, 1, 0) over(partition by a.instance_number, stat_name order by a.snap_id) b_snap_id,

a.snap_id e_snap_id,

a.stat_name,

a.value,

b.end_interval_time

from DBA_HIST_SYSSTAT a, dba_hist_snapshot b

where a.snap_id = b.snap_id

and a.instance_number = b.instance_number

and a.stat_name in ('redo size',

'session logical reads',

'db block changes',

'physical reads',

'physical writes',

'user calls',

'parse count (total)',

'parse count (hard)',

'sorts (memory)',

'logons cumulative',

'execute count',

'user commits',

'user rollbacks')

and b.begin_interval_time >= trunc(sysdate - 7)

and b.begin_interval_time <= trunc(sysdate)) g

where g.e_snap_id != 0

and f.b_snap_id != 0

and f.instance_number = g.instance_number

and f.stat_name = g.stat_name

and f.b_snap_id = g.b_snap_id

and f.e_snap_id = g.e_snap_id

order by 1, 2, 3;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值