データベースファイルの構成とI/Oの診断(2) --- 表アクセス、ディスクI/Oに関する統計

  • 全表走査の関する統計
    • フルスキャンはディスクI/O増加に直結するので、不必要に行わないよう調整
    • 索引やSQLチューニングで解決されることも多々ある
    • 全表走査がメインのバッチなどのセッションは、DB_FILE_MULTIBLOCK_READ_COUNTを一時的に大きくするのも効果的

v$sysstat.name 説明
table scans (short tables) キャッシュされるような小さな表に対するフルスキャン回数。通常LRUリストのMRU側に置かれるので、増えていても問題ない
table scans (long tables) キャッシュされないような大きな表に対するフルスキャン回数。通常LRUリストのL側に置かれたままとなり、毎回ディスクI/Oが発生する。増えていたら対策が必要。
table scan rows gotten フルスキャン行数
table fetch by rowid 索引走査行数

  • ディスクI/Oに関する統計
    • とにかく V$FILESTAT
    • PHYRDS != PHYBLKRD の場合、マルチブロックリード(フルスキャンの可能性あり)
    • 一つのファイルにI/Oが偏っている場合は、ボトルネックを解消する
    • REDOログファイルに関するディスクI/Oを診断する機能はOracleに存在しない
SQL> select f.name, s.phyrds, s.phyblkrd,
                    s.phywrts, s.phyblkwrt
     from v$filestat s, v$datafile f
     where s.file# = f.file# ;

NAME                  PHYRDS   PHYBLKRD    PHYWRTS  PHYBLKWRT
----------------- ---------- ---------- ---------- ----------
/DB/system01.dbf        1624       2533      10798      10798
/DB/undotbs01.dbf         77         77     210474     210474
/DB/cwmlite01.dbf         55         55         53         53
/DB/drsys01.dbf           55         55         53         53
/DB/example01.dbf         95        131         53         53
/DB/indx01.dbf            55         55         53         53
/DB/odm01.dbf             57         57         53         53
/DB/tools01.dbf           55         55         53         53
/DB/users.dbf            524        941      11477      11480
/DB/xdb01.dbf             59         63         53         53

10行が選択されました。

 ※STATSPACKを使用していれば、表領域ごとに見れてもっと便利