データベースバッファキャッシュ率は統計情報を格納しているV$SYSSTATより
取得することができる。キャッシュ率は90%以上が好ましい。
キャッシュ率を取得するSQL
SELECT db_block_gets --キャッシュIOブロック数その1 ,consistent_gets --キャッシュIOブロック数その2 ,physical_reads --物理IOブロック数 ,ROUND((1 - (physical_reads / (consistent_gets + db_block_gets))),3) * 100 --キャッシュ率 FROM ( SELECT SUM(CASE name WHEN 'db block gets' THEN VALUE ELSE 0 END ) AS db_block_gets ,SUM(CASE name WHEN 'consistent gets' tHEN VALUE ELSE 0 END ) AS consistent_gets ,SUM(CASE name WHEN 'physical reads' THEN VALUE ELSE 0 END ) AS physical_reads FROM V$SYSSTAT )
なお、V$SYSSTATに格納されている情報はインスタンスが起動されてからの累積なので
直近の値を知りたい場合は、調査したい処理の前後の値を比較する、
あるいは、ALTER SYSTEM FLUSH BUFFER_CACHEを実行して統計情報を初期化する必要がある。
http://d.hatena.ne.jp/haradago/20090608/p1
また、大量のデータを処理したい場合は、一度に実行するのではなく、
キャッシュを利用できる範囲(ディスクIOが発生しない)で実行した方が
処理速度が向上することがある。
動作確認環境:Oracle10g