Oracle系统级的性能统计数据对于解决性能问题十分有用, 因此在8, 8i, 9i, 10g, 11g的发展过程中, 性能统计项一直在不断增加. 要充分发挥这些数据的作用, 关键是如何展示这些性能数据, 以利于性能问题分析, 例如关于Oracle中物理读的一些统计值.

SQL> SELECT name, value FROM V$SYSSTAT WHERE STATISTIC# IN (54,120,56);

NAME                                VALUE
—————————— ———-
physical reads                       2373
physical reads direct                  39
physical reads direct (lob)             0

    如果只看绝对值, 是没有多少作用的, 从中看不到什么有用的信息.

20:10:24 SQL> select name,value from v$sysstat where statistic#=54;

NAME                                VALUE
—————————— ———-
physical reads                       3340

……

20:10:36 SQL> select name,value from v$sysstat where statistic#=54;

NAME                                VALUE
—————————— ———-
physical reads                       6371

    执行两次, 差值(6371 – 3340 = 3031)表示Oracle在两次收集的12秒时间(20:10:24 to 20:10:36)内总共从磁盘上读取了3031个数据块, 平均每秒钟303个块, 就很好地告诉了我们数据库的物理IO压力情况. 用oramon可以将不同的性能指标数据和时间显示成二维矩阵, 方便我们查看和分析问题.

www.AnySQL.net Exec BGets RReq Read Writ Redo …
11/27-20:15:47   54   206   15   15    0    0 …
11/27-20:15:57  196   718   41   41    0  664 …
11/27-20:16:07   64   637   19   61    0 6192 …
11/27-20:16:17   17    16    0    0    0    0 …
11/27-20:16:27   17    13    0    0    0    0 …
11/27-20:16:37   16     6    0    0    0    0 …

    用oramon工具可以较高频率(10秒一次)来收集数据, 更容易抓取瞬间的数据负载变化, 通过分析这段时间的各个性能数据, 如: Exec=执行次数, BGets=逻辑读, RReq=读请求, Read=特理读, Writ=物理写, Redo=日志量, 等等, 便可以知道负载升高的精确原因, 从而去采取有效措辞.