Oracle8 Tuning
〜データベースバッファキャッシュの検討〜
0.更新履歴
- 2001.01.22 新規作成
1.データベースバッファキャッシュの検討
データベースバッファキャッシュとは,次の様なものをメモリ上にキャッシングするために用いられる.
- 表
- 索引
- クラスタ
- ロールバックセグメント
この容量を大きくすることでディスクI/Oを減らすことが可能となるので,パフォーマンス向上が期待できる.
しかし,データベースバッファキャッシュのが実メモリーの大きさをオーバーした場合はページングが発生するため逆にパフォーマンスがダウンする.
データベースバッファ・キャッシュの容量はDB_BLOCK_SIZEとDB_BLOCK_BUFFERSのふたつのパラメータで設定できる.
パラメータ名 | 説明 |
---|---|
DB_BLOCK_SIZE |
データブロックのサイズを設定している.OSに依存するが,Solarisの場合だと2048Byteがデフォルトとなっている. この値はデータベースの作成時に設定され,それ以降は変更できない. トランザクションデータが極端に小さい,大きい場合以外は特にパフォーマンスに影響を与えることはないといわれている. |
DB_BLOCK_BUFFERS |
データベースキャッシュバッファのバッファ数を指定する. デフォルトは200個となっている. |
つまり,データベースバッファキャッシュのサイズは,次の式で計算できる.
|
データベースバッファキャッシュのサイズは大きいほうがパフォーマンスが良くなるが,キャッシュヒット率が高い場合には,それ以上のサイズを設定しても効果を得られなくなる.
5.1.データベースバッファキャッシュヒット率の算出
キャッシュヒット率が小さい場合は,キャッシュ容量が不足していると考えられる.
データベースバッファキャッシュのヒット率は,システム統計の中にある項目から計算できる.
Statistic Total Per Transact Per Logon Per Second --------------------------- ------------ ------------ ------------ ------------ CPU used by this session 22578 149.52 5644.5 4.13 CPU used when call started 22578 149.52 5644.5 4.13 CR blocks created 2005 13.28 501.25 .37 DBWR buffers scanned 33394 221.15 8348.5 6.11 〜略〜 commit cleanouts successful 15467 102.43 3866.75 2.83 consistent changes 2408 15.95 602 .44 consistent gets 602544 3990.36 150636 110.32 cursor authentications 57 .38 14.25 .01 data blocks consistent read 2011 13.32 502.75 .37 db block changes 1110248 7352.64 277562 203.27 db block gets 702959 4655.36 175739.75 128.7 〜略〜 physical reads 317056 2099.71 79264 58.05 physical reads direct 82280 544.9 20570 15.06 physical writes 373775 2475.33 93443.75 68.43 〜略〜 user calls 33506 221.89 8376.5 6.13 user commits 151 1 37.75 .03 write clones created in bac 96 .64 24 .02 write clones created in for 114 .75 28.5 .02 |
上記システム統計の中の,次の項目が必要となる.
項目 | 説明 |
---|---|
consistent gets |
SQL文の実行によってアクセスされたバッファ・キャッシュ中のブロック数. for update句のないselect文でアクセスしたブロック数. |
db block gets |
SQL文の実行によってアクセスされたバッファ・キャッシュ中のブロック数. insert,update,delete,for update句のあるselect文でアクセスしたブロック数 |
physical reads |
物理的なI/Oを発生させるリクエスト数 |
システム統計から,それぞれの項目のTotalを用いて,次の様な計算式でキャッシュヒット率を算出できる.
ヒット率 = 1 - ( "consistent gets" ÷ ( "db block gets" + "physical reads") ) |
これを前出のレポートから引用して当てはめると,
1 - (317056 / (602544 + 702959 ) = 0.24286118070965750365950901683106 |
となるので,ヒット率は24%となる.
ヒット率が90%以下の場合は,DB_BLOCK_BUFFERSの値を大きくする.