バッファー・プール・ヒット率

バッファー・プールのヒット率は、 入出力操作を必要とせずにページ・アクセス (getpage) が満たされる頻度を示します。

プログラム固有のプログラミングインターフェース情報の開始。バッファー・プールを十分に大きくしてバッファー・ヒット率を大きくすることによって、アプリケーションや照会の一部を支援することができます。

アプリケーション関連のアカウンティング・レポートでは、アプリケーションまたはスレッドの複数オカレンスの平均ヒット率が示されます。 アカウンティング・トレース・レポートでは、単一のアプリケーションまたはスレッドのヒット率が示されます。 IBM® OMEGAMON® for Db2 Performance Expert on z/OS® バッファー・プール統計レポートには、サブシステム全体に対するヒット率が表示されます。 例えば、バッファプールヒット率は、BPOOL HIT RATIO (%)次の図のフィールド。

図1: IBM OMEGAMON for Db2 Performance Expert on z/OS データベースバッファープール統計(変更)
TOT4K  READ OPERATIONS       QUANTITY  TOT4K  WRITE OPERATIONS      QUANTITY
---------------------------  --------  ---------------------------  --------
BPOOL HIT RATIO (%)            73.12   BUFFER UPDATES                 220.4K
                                       PAGES WRITTEN                35169.00
GETPAGE REQUEST               1869.7K  BUFF.UPDATES/PAGES WRITTEN       6.27
GETPAGE REQUEST-SEQUENTIAL    1378.5K                                        
GETPAGE REQUEST-RANDOM         491.2K  SYNCHRONOUS WRITES               3.00
                                       ASYNCHRONOUS WRITES           5084.00
SYNCHRONOUS READS            54187.00                                       
SYNCHRON. READS-SEQUENTIAL   35994.00  PAGES WRITTEN PER WRITE I/O      5.78
SYNCHRON. READS-RANDOM       18193.00                                       
                                       HORIZ.DEF.WRITE THRESHOLD        2.00
GETPAGE PER SYN.READ-RANDOM     27.00  VERTI.DEF.WRITE THRESHOLD        0.00
                                       DM THRESHOLD                     0.00
SEQUENTIAL PREFETCH REQUEST  41800.00  WRITE ENGINE NOT AVAILABLE       0.00
SEQUENTIAL PREFETCH READS    14473.00  PAGE-INS REQUIRED FOR WRITE     45.00
PAGES READ VIA SEQ.PREFETCH    444.0K                                       
S.PRF.PAGES READ/S.PRF.READ     30.68                                       
                                                                            
LIST PREFETCH REQUESTS        9046.00                                       
LIST PREFETCH READS           2263.00                                       
PAGES READ VIA LST PREFETCH   3046.00                                       
L.PRF.PAGES READ/L.PRF.READ      1.35                                       
 
DYNAMIC PREFETCH REQUESTED    6680.00                                       
DYNAMIC PREFETCH READS         142.00                                       
PAGES READ VIA DYN.PREFETCH   1333.00                                       
D.PRF.PAGES READ/D.PRF.READ      9.39                                       
PREF.DISABLED-NO BUFFER          0.00                                       
PREF.DISABLED-NO READ ENG        0.00                                       
 
PAGE-INS REQUIRED FOR READ     460.4K                                       

バッファー・ヒット率では、以下の計算式を使用して、ページ取得 (getpage) 操作のうち入出力操作を必要としなかったものがいくつあったかを判別します。

Hit ratio = ((getpage-requests - pages-not-in-bp - pages-read-from-disk) /
            (getpage-requests - pages-not-in-bp)) * 100
公式では、バッファー・プール統計レポートのフィールドから次の値を使用します。
  • getpage-requests は getpage リクエストの数ですGETPAGE REQUEST設定します。
  • pages-not-in-bp は、ページがバッファプールになかったために失敗した getpage リクエストの数ですCOND. REQUEST - NOT FOUND設定します。
  • pages-read-from-disk は、次のフィールドの値の合計です。
    • SYNCHRONOUS READS:同期読み取りの回数
    • PAGES READ VIA SEQ.PREFETCHシーケンシャルプリフェッチで読み込まれたページ数。
    • PAGES READ VIA LST PREFETCH:ページ読み込みリストのプリフェッチ数。
    • PAGES READ VIA DYN.PREFETCH: 動的プリフェッチで読み込まれたページ数。

1000 個のページ取得要求があり、要求されたすべてのページがバッファー・プールにあり、100 ページがディスクから読み取られた場合、式は次のようになります。

Hit ratio = ((1000 - 0 - 100)/1000)) * 100

この場合、ヒット率は 90% です。

最大および最小ヒット率

最大ヒット率
ヒット率の最大値は 1.0 (つまり 100%) で、このヒット率は、要求されたすべてのページが常にバッファー・プールに存在していたことを示します。 索引のノンリーフ・ページの読み取りは、ヒット率が非常に大きくなる原因になります。これは、索引のノンリーフ・ページは頻繁に再参照されるので、バッファー・プール内にとどまることが多いためです。
最小ヒット率
ヒット率が最小になるのは、要求されたページがバッファー・プールに存在していなかった場合です。この場合、ヒット率は 0 以下になります。 ヒット率が負の場合、プリフェッチによってバッファー・プールに取り出されたページが、それ以後参照されなかったことを示します。 このページは参照されません。照会が表スペースの終わりに達する前に停止されるか、Db2がページを移動して、より新しいものを作成してから照会がそれらのページにアクセスできるようにする必要があります。

低ヒット率が悪いとは限らない

バッファー・ヒット率をできる限り 100% に近づけることが望ましいと考えがちですが、バッファー・プールのヒット率が低いことが悪いことだとは一概には言えません。 ヒット率は相対値であり、アプリケーションのタイプに基づいています。 例えば、表スペース・スキャンを使用して大量のデータを参照するアプリケーションの場合、バッファー・プールのヒット率が 0 になることはよくあり、プリフェッチ処理のために負数になることさえあります。 注意する必要があるのは、同一のアプリケーションでヒット率が著しく下がった場合です。 このような場合には、さらによく調べてみることをお勧めします。

バッファー・プール・ヒット率は、順次アクセス頻度の高いオブジェクトのあるバッファー・プールでは意味がありません。 順次アクセス・オブジェクトを別個のバッファー・プールに移動すると、ランダム・アクセス・オブジェクトのバッファー・プール・ヒット率を向上させることができます。