技术开发 频道

Oracle10g新特性——工作量自动收集

使用这些统计数据

    上面我们了解了AWR是如何收集统计数据的,下面就来了解以下如何利用这些数据。大多数性能问题并非孤立的,但是也不要相信哪些可以找出问题的最终根源的流言。让我们来做一个典型的调优练习:你发现系统变得很慢,决定检查一下等待事件。通过检查发现,“缓存忙等待(buffer busy wait)”非常高。如何解决这个问题呢?存在几种可能:可能是索引的单一增长引起的;某张表饱和了,需要立即转载一个数据块到内存中;以及其他的原因引起的。在任何情况下,你都需要先定位出发生问题的段。如果它是一个索引段,你可以决定是否重建索引、把索引改为相反键索引、或者将索引转换为在Oracle 10G特有的哈希分区索引。如果是一张表,可以考虑修改表的存储参数使它密度降低,或者将它转移到一个自动段空间管理的表空间上去。你的这些计划、措施一般都是系统的,并且是基于你对各种事件的了解和你在处理这些问题所积累的经验。想向一下,如果这些事情是由机器驱动来完成——这个驱动能捕捉度量数据并且在基于预先定义的逻辑能演绎出可能的计划、措施,那么你的工作不是能变得很轻松吗?

    现在Oracle 10G就提供了这样的驱动,它就是自动数据库诊断监视器(Automatic Database Diagnostic Monitor ADDM)。ADDM使用AWR收集的数据来达到那样的效果。在上述的例子中,ADDM能够发现发生了buffer busy waits,找出适当的数据来检查在哪个段上面发生的,计算出它的本来数据和混合数据,并最终为DBA提供解决办法。每当AWR收集了一个快照数据,ADDM就会检查这些度量数据,并产生出相应建议。因此,你就拥有了一个全天候工作的机器人DBA来为你分析数据、提前为你给出建议,让你由更多的时间来关注战略问题。通过使用新的10G企业管理器平台——DB Home——可以查看ADDM的建议和AWR存储的数据。你可以从管理界面的导航器上查看AWR的报告、负荷数据以及快照信息。将来可以安装更多组件来在更多细节上来检查ADDM。

    你还可以指定在特定条件下产生告警信息。这些告警,如服务器产生的告警(Server Generated Alerts),会被推入一个高级队列。在任意一个客户端上可以监听这个队列。一种客户端就是10G企业管理器,在上面可以显著的显示出告警信息。

时间模型

    当你遇到一个性能问题时,首先想起降低哪个响应时间呢?你当然希望能消除或降低引起问题的最终因素的时间。但是你怎么才能知道时间被消耗在哪呢——不是等待,而是实际的工作时间?

    Oracle 10G介绍了使用时间模型来通过不同途径定位时间消耗。整个系统的时间消耗被记录在视图V$SYS_TIME_MODEL中。下面是一个对这个视图查询的结果:

STAT_NAME VALUE ------------------------------------- -------------- DB time 58211645 DB CPU 54500000 background cpu time 254490000 sequence load elapsed time 0 parse time elapsed 1867816 hard parse elapsed time 1758922 sql execute elapsed time 57632352 connection management call elapsed time 288819 failed parse elapsed time 50794 hard parse (sharing criteria) elapsed time 220345 hard parse (bind mismatch) elapsed time 5040 PL/SQL execution elapsed time 197792 inbound PL/SQL rpc elapsed time 0 PL/SQL compilation elapsed time 593992 Java execution elapsed time 0 bind/define call elapsed time 0

    注意DB Time这个统计项,它表明了自从实例启动后数据库消耗的时间。重新运行查询这个视图的语句,数据库消耗时间的数据将和之前不同。通过一轮调优,再作同样的分析,可以看出调优后的DB Time的改变,通过和第一的数据比较发生的变化,可以检查调优对于数据库时间产生的影响。除了数据库时间,视图V$SYS_TIME_MODEL还能显示其他很多统计数据,如消耗在不同类型的语句分析(Parsing)上的时间,甚至PL/SQL的编译时间。

    这个视图显示的整个系统的时间模型。但是你可能对更细粒度上的视图感兴趣:会话级的时间模型。视图V$SESS_TIME_MODEL能显示在会话级捕捉到的时间统计数据。这些数据统计的是当前的会话,包括所有的活动的和不活动的都可见。多出的字段SID表明了所统计的会话的SID。

    在Oracle的以前版本,这些数据根本无法获取到,需要用户从各种其他数据中猜测出来。在Oracle 10g中,获取这些数据简直是小菜一碟。

0
相关文章