10.5 调试一个Oracle数据库
下面说明一些监视和调试数据库实例性能的方法。除上面列出的主题外,还将介绍如何解释从收集的统计数字中得到的结果,和一些可以用来改善关键性能测量标准如高速缓存区命中率方面的内容。
10.5.1 收集统计数字
Oracle通过提供名为UTLBSTAT和UTLESTAT的两个著名的SQL脚本来使得监视大量的数据库统计数字变得更简单。在$ORACLE_HOME/rdbms/admin文件夹中可以找到这些脚本。UTLBSTAT和UTLESTAT脚本可以收集一些统计数字,它们显示和一段时间内数据库所发生的事件。按照下面步骤使用它们:
(1)运行UTLBSTAT。这个脚本建立几个工作表,从几个动态性能视图V$视图中取得当前的统计数字的抽点打印,把那个抽点打印存储在工作表中。
(2)运行UTLESTAT。这个脚本从动态性能视图中取得了当前统计数字的抽点打印并把它和UTLBSTAT以前记录的抽点打印进行比较。然后它根据两个脚本之间的差异产生报告。
UTLBSTAT和UTLESTAT值取决于它们在特定时间段内报告统计数字的能力。动态性能视图和这些脚本引用的联合统计数字在实时方面是有用的。不过,从那些视图中返回的信息是从启动数据库的时刻起累积的。如果数据库已经连续运行几个月,不可能仅通过图中的当前值而注意到小的日常变化。
例如,如果高速缓存器的命中率在一天内突然下降,直接查询性能视图时可能不会影响得到的全部比率。但是,如果每天连续运行UTLBSTAT和UTLESTAT,并记录高速缓存比,那么突然的降低将会是很棘手的问题。
为了从这些统计数字中得到大部分值,可以使用Oracle的定时统计数字特性。它允许Oracle跟踪各种事件消耗的时间量。通过将下列行放入数据库参数文件来使用定时统计数字:TIMED_STATISTICS=TRUE收集定时统计数字会牵扯到一些开销,但是,得到的这些信息的值使得花费这些开销是值得的。
10.5.2 步骤
1.开始收集进程
为了开始收集统计数字的进程,需要运行UTLBSTAT来建立一个底线。UTLBSTAT为内部用户连接到数据库,从Oracle8i开始,可以从SQL﹡Plus运行这个脚本。运行UTLBSTAT时,首先删除并重新建立它使用的工作表。如果碰巧那些表不存在,将会在屏存上看到几条错误信息滚动显示。DROP命令失败是可以的。CKEATE TABLE命令将继续,工作表将被立。建立工作表之后,执行几条INSERT语句来插入它们。这些INSERT语句从类似V$SYSSTAT,V$LANCH和V$LIBRARYCACHE的关键性能视图中取得当前的抽点打印信息。这条信息被存储在工作表中为了与后面被UTLESTAT取得的终止值相比较。
运行UTLBSTAT脚本:
SQL>@d:\oracle\ora81\rdbms\admin\utlbstat.sql;
(结果省略)
一旦UTLBSTAT脚本已经运行,读者需要做的就是等待收集统计数字的时间阶段结束,然后运行UTLESTAT。
2.终止收集进程
为了终止收集统计数字的进程,运行UTLESTAT脚本,这个脚本收集了来自动态性能视图的统计数字的另一个抽点打印,与UTLBSTAT保存的最初的抽点打印比较生成包括结果的被命名为REPORT.TXT的文本文件。
3.解释结果
REPORT.TXT包括几百行统计数字,可分为下列几部分:
(1)库高速缓存区统计数字。
(2)数据库统计数字。
(3)脏缓存器写队列长度。
(4)系统宽度等待事件。
(5)锁存统计数字。
(6)缓存区忙等待统计数字。
(7)回滚段统计数字。
(8)当前初始化参数设定。
(9)字典高速缓存区统计数字。
(10)表空间和数据文件输入/输出统计数字。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。