March 2010
M T W T F S S
« Jan    
1234567
891011121314
15161718192021
22232425262728
293031  

Oracle性能分析工具概览与开发设想

上一篇文章提到的那些个工具,主要侧重点在于实时监控,而在我看来,实时监控只是一个监控工具的一个职责而已。就如Linux上的collectl或者nmon一样,我们还需要对这些历史性能数据进行保存,以便于过后进行分析。而且,这也是一个不可或缺的功能,毕竟,DBA不会也不可能24小时盯着屏幕,DBA做的主要事情应该是对历史数据进行分析从而更好的认识数据库的工作状态。

监控工具方面,也有很多实现这方面需求的软件。记得anySQL.net上面就有一个类似的监控工具。通过收集v$sysstat和v$session的数据,再利用图表的方式进行分析。这应该是这类软件的共性。

但有一个”工具”值得大提特提,那就是Oracle自身的AWR。AWR默认一个小时对系统做一次快照,这些快照其实是难得的历史性能数据,Oracle自带的AWR报告,主要是基于两个快照间的分析,因此只能得到一些孤立的数值。如果我们能够更进一步,实现对所有快照数据的分析,我们就能清晰地了解系统过去一段时间(默认AWR保留7天)的工作负载的特征曲线,各种重要指标的变化曲线。我想,这些曲线对于DBA或者决策层而言都是极其有用的……

Oracle监控工具概览

写了Linux上的监控与分析工具之后,写写Oracle上相应的监控与分析工具还是挺有意思的,一方面可以更加完整,一方面可以进行横向对比。

Linux上的性能数据一般都来自于/proc文件系统,而Oracle则是来自于V$视图。因此,所有的Oracle监控工具的实现都万变不离V$ 视图。而这些个视图里面,最重要的应推v$sysstat。里面记录着Instance一级的各个统计数据的当前值,例如CPU利用情况,逻辑读,Redo Size等等。10g后有了另一个重要的视图,叫v$active_session_history,通过它可以容易地得知当前Instance的活动状态,主要是各个时刻系统都在等待哪些事件,通过对这些等待事件和相应等待次数的处理,就可以清晰地了解系统的历史工作负载特征和压力。如果想获取当前正在执行的SQL,则可查询v$sql视图。如果想获取当前SQL的执行计划,则可调用dbms_xplan.display_cursor。从这方面讲,一个DBA都具备着写一个Oracle的监控工具的能力。它应该比写一个Linux的监控工具来得容易简单得多……