Oracle10g数据库的历史数据机制允许DBA们按时查看对响应时间趋势的分析,这将有助于DBA们确定事务/系统的高峰时期,更好的定位那些拉长批处理周期和ETL作业的进程和SQL语句。
可以在V$SYS_TIME_MODEL视图中找到相应的主要花费时间处理的部分,然后就可以根据这些来对数据库进行相应的调整。
除了活动时间,DBA也还想知道整体的等待时间。在Oracle10g数据库之前,DBA必须查看单独的等待事件来找出等待和瓶颈,现在Oracle10g数据库提供一个等待的概要机制。
select WAIT_CLASS,
TOTAL_WAITS,
round(100 * (TOTAL_WAITS / SUM_WAITS),2) PCT_WAITS,
ROUND((TIME_WAITED / 100),2) TIME_WAITED_SECS,
round(100 * (TIME_WAITED / SUM_TIME),2) PCT_TIME
from
(select WAIT_CLASS,
TOTAL_WAITS,
TIME_WAITED
from V$SYSTEM_WAIT_CLASS
where WAIT_CLASS != 'Idle'),
(select sum(TOTAL_WAITS) SUM_WAITS,
sum(TIME_WAITED) SUM_TIME
from V$SYSTEM_WAIT_CLASS
where WAIT_CLASS != 'Idle')
order by 5 desc;
WAIT_CLASS TOTAL_WAITS PCT_WAITS TIME_WAITED_SECS PCT_TIME
User I/O 5748 61.71 67.57 65.79
Other 182 1.95 16.85 16.41
System I/O 2975 31.94 11.27 10.97
Concurrency 114 1.22 6.76 6.58
Commit 61 0.65 0.22 0.21
Network 233 2.5 0.03 0.03
Application 2 0.02 0 0 |
这样就能非常容易的找出大部分的整体等待时间。如同响应时间数据一样,我们可以用下面的查询来及时回顾最新的一个小时等待类型:
select a.sid,
b.username,
a.wait_class,
a.total_waits,
round((a.time_waited / 100),2) time_waited_secs
from sys.v_$session_wait_class a,
sys.v_$session b
where b.sid = a.sid and
b.username is not null and
a.wait_class != 'Idle'
order by 5 desc;
SID USERNAME WAIT_CLASS TOTAL_WAITS TIME_WAITED_SECS
38 SYS User I/O 22 0.19
48 SYS User I/O 15 0.12
38 SYS Network 21 0.01
48 SYS Network 24 0
38 SYS Application 2 0 |
这个时候,就可以检查标准的单独等待事件就如在以前版本的Oracle数据库中查询V$SESSION_WAIT和V$SESSION_EVENT视图。在Oracle10g数据库中DBA还将可以找出新的等待类型在这两张视图中。如果需要找出以前哪个会话登录并且消耗了大部分的资源,你可以使用下面的查询,下面的例子是查找午夜12点到5点的数据库活动,并且包括用户的I/O等待。