データベースの稼働状況を診断共有するサイト パフォーマンスセラピー
Statspackとは Statspack設定 statspackでの情報収集 statspackレポートの出力 便利スクリプト Oracleチューニング講座


                                  
第11章 予約プールについて理解し設定してみよう
本章では、第10章共有プールのチューニングを学ぶ(2) の(5)ライブラリ・キャッシュ・ミスの解消4(断片化解消)で紹介した予約プールについて説明します。

非常に大きいメモリーを必要とするPL/SQLが呼び出されたような場合、Oracleの動作として共有プール内の十分な空き領域を検索する必要があります。この操作では検出中にラッチ・リソースを保持するため、メモリー割当てで他の同時動作に対して多少の影響を及ぼす可能性があります。また、共有プールの断片化のため、大きなメモリー領域を確保できないような場合があります。そのような場合に、共有プール内に大きなメモリー領域用に予約プール領域を用意する事により回避します。
このように予約プールは、共有プールに大きい割当てを行うために領域を検索し作成するオーバーヘッドを回避し、断片化を予防することができますので、是非参考にしていただければと思います。

予約プール領域の設定
予約プールは、SHARED_POOL_RESERVED_SIZEパラメータで設定します。
以下の表1にSHARED_POOL_RESERVED_SIZEパラメータの設定概要について記します。

表1:SHARED_POOL_RESERVED_SIZEパラメータの概要
SHARED_POOL_RESERVED_SIZEパラメータ
概要 予約プールのサイズを設定する
構文 SHARED_POOL_RESERVED_SIZE = n [ K | M | G ]
デフォルト SHARED_POOL_SIZEの5%
変更の可/不可 静的

大きいメモリー割当ての場合、常に予約プール領域が使用される訳ではありませんのでご注意ください。
共有プール内の大きいメモリー割当て順序を以下に示します。
1.共有プールの予約プール以外の領域に割り当てる
2.共有プールの予約プール以外の領域に空きがなかった場合は、予約プール領域に割り当てる
3.ともに十分な領域がない場合は、Oracleは必要なメモリー確保のためにメモリーを解放し、1と2のステップ
  を繰り返す

予約プール領域の確認
予約プール内の情報は、V$SHARED_POOL_RESERVEDビューで確認できます。
V$SHARED_POOL_RESERVEDビューは予約プールに関する統計を示します。

<主な列>
・FREE_SPACE :予約プール内の合計空きメモリーサイズ
・MAX_FREE_SIZE :予約プール内の最大空きメモリーサイズ
・REQUEST_MISSES :予約プール内に空きメモリーがなく、オブジェクトのフラッシュが実行された回数
・REQUEST_FAILURES :ORA-4031(共有プールにメモリー割当てができなかった)エラーの発生回数

NOTE 予約プールを使用するオブジェクトのサイズのしきい値は、4400バイト以上です。

設定のガイドライン
予約プールを使用する場合は、V$SHARED_POOL_RESERVEDビューを監視し、増加・縮小するべきか確認する必要があります。

以下のような場合は、予約プールが小さいので(共有プールと共に)増加することを検討します。
■REQUEST_MISSES列の値 > 0且つ増加している場合
■REQUEST_FAILURES列の値 > 0 且つ増加している場合

目標は以下の値になることです。
■REQUEST_MISSES列の値 = 0
■REQUEST_FAILURES列の値 = 0 または増加なし

共有プールにこれ以上のメモリーを追加できないような場合は、予約プールを小さくすることでREQUEST_FAILURESの増加を押さえられる場合もあります。

以下のいずれかの場合は、予約プールが大きすぎるので小さくすることを検討します。
■REQUEST_MISSES列の値 = 0  
 REQUEST_MISSES列の値の目標値は0ですが、予約プールが大きすぎる場合でもREQUEST_MISSES
 列が0になるため、常に0から増加しない場合は予約プールを小さくしてREQUEST_FAILURESの増加を押
 さえます。
■FREE_SPACE列の最小値 => SHARED_POOL_RESERVED_SIZEの50%の場合

以下にV$SHARED_POOL_RESERVEDビューを参照した場合の例を記します。

例)V$SHARED_POOL_RESERVEDビューを参照する
SQL> SELECT free_space,request_misses,request_failures
2 FROM v$shared_pool_reserved;

FREE_SPACE REQUEST_MISSES REQUEST_FAILURES
------------------- ---------------------------   --------------------------
130504            8  0
上記の結果からREQUEST_MISSESの値が0よりも大きいので、予約プールが小さいという事が分かります。このまま増加しているようであれば予約プールを大きくすることを検討します。

以上で予約プールの説明は終了です。予約プールの設定が必要な場合はご参考ください。
第12章では、DBMS_SHARED_POOLパッケージを紹介します。


               
                第12章 DBMS_SHARED_POOLパッケージを使ってしてみよう