累计读者的来信中,有若干位同仁谈到Oracle的性能问题。什么叫性能慢?怎么量化性能统计?问题我不一一列出了,下面的文字大部分来自Oracle 英文文档,我认为描述的极为精确,比我说的强。

也请参见www.usedb.cn.

如果有效地诊断性能问题,则进行性能统计必不可少。Oracle能够产生基于整个系统表现的、或者基于会话的、或者基于单个SQL语句的统计数据。Oracle也可以在段和服务追踪和获取统计数据的累积值。当我们关注某个方面的性能问题时,我们只需将该范围的统计数据拿来,并作出判断。一种典型方法是取得采样期间统计数据的“首”“尾”,判断期间的差异,并据此得出新能问题所在的判断。

统计数据,通常是自系统启动后到当前的累计统计数据,可以通过诸如V$SESSTAT V$SYSSTAT等动态视图获得。因此,任何一次数据库系统的启动关闭操作都会导致这些统计数据的重置。

Oracle 10g/11g 包含了如下类型的统计数据:

¨ AWR的统计数据,关于系统运行的累计统计;

¨ 度量值,关于累计统计差异性描述的变化值;

¨ 抽样数据,关于激活会话的统计数据。

Oracle在10g版本中提供了自动的工作量资料档案库功能,简称AWR,就是自动进行性能取样,数据涵盖了除会话级别统计以外的大多统计。这个过程在一段时期内重复进行,每次取样结果称为一张AWR快照。每张快照之间的差异描述了系统性能状态的改变,因此,这种快照代表了系统在取样期间内的改变。

除此之外,Oracle还自动收集另一种类型的统计,称之为:度量值。所谓度量,就是某个累计统计数据,在取样期间内改变的程度、比率。“度量”能涵盖各种性能方面,包括响应时间、事务处理吞吐量、数据库调用数量、磁盘读写数量等。度量值可以通过对V$ 类型的动态视图中获得,v$视图中的数据是一个相当小的时间间隔内的平均值,一般而言是60秒的期间。通过v$视图可以获得近期的度量值,远期的度量值则可以通过AWR快照获得。

还有一种Oracle收集的统计数据,称之为抽样数据。Oracle10g中新增了抽样数据的取样机制,称之为自动的会话历史记录 ( ASH )。抽样数据由ASH执行完成。ASH抽样所有活跃会话当前状态,抽样数据被收集到内存中,通过V$视图访问。在AWR进行工作载荷取样时,这类数据也被自动搜集。

Oracle10g提供了一种诊断系统性能问题的有力方法:对比法。首先,我们需要建立统计基准线。这个基准线可以采用系统在高效、稳定运行期间的统计数据集合。依据这个基准线集合,在系统出现性能出现问题的情况下,进行对比,发现问题所在。这种方法有效地解决了当我们面对数以千计的数据库性能统计数据而一筹莫展的问题,避免我们陷入统计数据的海洋。

统计基准线的获得通过AWR实现。通过AWR,我们指定度量基准线和保存AWR快照的时间范围或一种类似指定,并把这段期间的统计数据作为统计基准线。显然,这个时间范围指定应慎重选择。最合理的度量基线,应该是在系统正常载荷状态下,具有良好性能状态时,获得的累计统计。这样,在系统遭遇性能障碍时,通过好坏比较得到问题根源。

这里所说的所有统计数据——实时性能数据,或者AWR历史快照数据,我们都可以通过Oracle企业管理器(OEM)查看。不仅如此,企业管理器也能用来捕捉与AWR统计数据相关的操作系统和网络统计的数据。