前言
DBA往往需要在数据库性能问题的时候快速获取数据库负载信息,而AWR此时通常作为最有效的工具之一,虽然AWR很优秀,但是众所周知也存在一些缺陷,主要体现在如下两方面:
- 内容繁多,用时较长
- AWR统计的是begin_snap、end_snap两个快照间间累积差异,在这之间每个快照间的变化无法体现
大家都知道AWR报告也都来源于数据库相关视图,因此只要我们弄清楚这些元数据的关系,就能按照我们自己的意愿组织我们自己所最关心的报告数据。
脚本
如下,这是自己参考相关资料总结的top timed events报告脚本,如果有需要可以通过下文的链接下载
说明
- 大家都知道:DB time = DB CPU +non idle wait time+ os cpu run queue time + truer gap time,os cpu run queue time 在os层是一个较难准确把握的指标,有兴趣的同学可以参考这篇博文对它的研究:How OS CPU Run Queue Time Relates To Oracle Database Time 这里我直接使用DBA_HIST_OSSTAT中的RSRC_MGR_CPU_WAIT_TIME统计值。关于该值的说明可以参考V$OSSTAT。
- 为了保持与AWR报告中展示一致性,已在最终结果中过滤掉“cpu on queue time”,如果有需要请注释掉“AND event != ‘cpu on queue time’”
- 脚本已经在oracle 11.2.0.1、11.2.0.4单实例和RAC环境下通过测试