データベースバッファキャッシュのチューニング(4) --- 複数バッファプール

  • 複数バッファプールの概要
    • オブジェクトごとにデータブロックが読み込まれるキャッシュを使い分ける
    • アプリケーションのアクセス特性が分散している場合に検討
    • LRUリストもそれぞれに用意される
    • メモリ側の設定とセグメント側の設定が必要
  • 複数バッファプールの設定

プール名 目的 パラメータ
DEFAULT 必須のバッファ DB_CACHE_SIZE
KEEP 頻繁に再利用されるオブジェクトをメモリ上に保持しておき、I/Oを減らすために使用。DEFAULTバッファプールサイズの10%未満のサイズのセグメントが目安。格納するすべてのデータブロック数の合計を確保する。 DB_KEEP_CACHE_SIZE
RECYCLE ほとんど再利用されないオブジェクトをメモリ上に残さないようにして効率的にメモリを使用するために使用。DEFAULTバッファプールの2倍以上のサイズを持つセグメントが目安。トランザクションが完了するまでにアクセスするデータブロック数のサイズを確保する。 DB_RECYCLE_CACHE_SIZE

SQL> alter system set db_keep_cache_size=16M scope=both ;

システムが変更されました。

SQL> show parameter cache_size

NAME                   TYPE         VALUE
---------------------- ------------ ----------
db_16k_cache_size      big integer  0
db_2k_cache_size       big integer  0
db_32k_cache_size      big integer  0
db_4k_cache_size       big integer  0
db_8k_cache_size       big integer  0
db_cache_size          big integer  268435456
db_keep_cache_size     big integer  16777216
db_recycle_cache_size  big integer  0

SQL> select SEGMENT_NAME,SEGMENT_TYPE,BUFFER_POOL
     from dba_segments where segment_name like 'TAX' ;

SEGMENT_NAME SEGMENT_TYPE BUFFER_POOL
------------ ------------ ------------
TAX          TABLE        DEFAULT
TAX          INDEX        DEFAULT

SQL> alter table USER1.TAX storage(buffer_pool keep) ;

表が変更されました。

SQL> select SEGMENT_NAME,SEGMENT_TYPE,BUFFER_POOL
     from dba_segments where segment_name like 'TAX' ;

SEGMENT_NAME SEGMENT_TYPE BUFFER_POOL
------------ ------------ ------------
TAX          TABLE        KEEP
TAX          INDEX        DEFAULT
  • 複数バッファプールのヒット率
    • v$sysstatから算出すると、全部のバッファプールの合計になってしまう
    • V$BUFFER_POOL_STATISTICSビューを使用