データベースバッファキャッシュのチューニング(2) --- チューニング目標、診断方法

  • チューニング目標
    • ディスクI/Oは負荷が高いのでなるべく減らすことが重要
    • OLTP系システム:バッファヒット率90%以上
    • DSS系システム:ディスクから読み込むことがほとんどなので、メモリよりもI/Oチューニング重視する
    • 他のプロセスのためのメモリも必要なので、過度なページフォルトが無いことを確認してキャッシュを増やす。
    • 前回のキャッシュ追加が効果的ではなかったら、増やしても意味が無い
      • DSS系はフルスキャンがメインのため、キャッシュを増やしても効果は出ない
      • フルスキャンした場合は、LRUリストのL側にのせられる
      • ソート処理やパラレル処理ではデータベースバッファキャッシュは使用されない
  • 診断方法
    • ヒット率=1−(ダイレクト処理を除く物理読込ブロック数/総読込ブロック数)
    • システム統計(v$sysstat)の下記の情報より算出

session logical reads 総読込ブロック数
physical reads 物理読込ブロック数
physical reads direct ダイレクト読込ブロック数(パラレルクエリなど)
physical reads direct(lob) ダイレクト読込ブロック数(画像・音声データなど)

SQL> select 1-(phy.value - dir.value - lob.value) / ses.value 
     "Hit rate"
     from v$sysstat ses, v$sysstat phy,
     v$sysstat dir, v$sysstat lob
     where ses.name='session logical reads'
     and phy.name='physical reads'
     and dir.name='physical reads direct'
     and lob.name='physical reads direct (lob)' ;

  Hit rate
----------
.999937215

 ※DBにある程度負荷をかけてから診断する

  • ヒット率以外で確認しておきたい情報
    • free buffer inspected (v$sysstat):空きリスト探した数
    • buffer busy waits (v$system_event):バッファにアクセスするのを待機した数
    • free buffer waits (v$system_event):使用済みリストが満タンで空きバッファが見つけられなかった数
  • バッファキャッシュアドバイザの使用
    • 9i新機能
    • alter system set DB_CACHE_ADVICE=ON|READY|OFF
    • OFFにするとアドバイザ用に割り当てられた共有プールのメモリは開放される
    • V$DB_CACHE_ADVICEビューに予測結果が格納される
SQL> show parameter db_cache_size

NAME             TYPE         VALUE
---------------- ------------ -----------
db_cache_size    big integer  67108864

SQL> select name,
            block_size "block",
            size_for_estimate "size(MB)",
            buffers_for_estimate "buffers",
            estd_physical_read_factor "read_factor",
            estd_physical_reads "physical_reads"
     from v$db_cache_advice ;

NAME     block   size(MB)    buffers     factor    p_reads
-------- ----- ---------- ---------- ---------- ----------
DEFAULT   8192         16       1985     3.5866      14852
DEFAULT   8192         32       3970     1.1064       4582
DEFAULT   8192         48       5955          1       4141
DEFAULT   8192         64       7940          1       4141
DEFAULT   8192         80       9925          1       4141
DEFAULT   8192         96      11910          1       4141
DEFAULT   8192        112      13895          1       4141
DEFAULT   8192        128      15880          1       4141
DEFAULT   8192        144      17865          1       4141
DEFAULT   8192        160      19850          1       4141
DEFAULT   8192        176      21835          1       4141
DEFAULT   8192        192      23820          1       4141
DEFAULT   8192        208      25805          1       4141
DEFAULT   8192        224      27790          1       4141
DEFAULT   8192        240      29775          1       4141
DEFAULT   8192        256      31760          1       4141
DEFAULT   8192        272      33745          1       4141
DEFAULT   8192        288      35730          1       4141
DEFAULT   8192        304      37715          1       4141
DEFAULT   8192        320      39700          1       4141

※現在64MBで、32Mに減らすと物理読み込みが増加する。またこれ以上データベースバッファキャッシュを増やしても全然効果が無いことがわかる。