読み取り操作およびプリフェッチ入出力

Db2は、ほとんどすべての場合にデータを読み取るためにプリフェッチ入出力を使用しますが、特定のケースでは同期入出力を使用します。

同期読み取りが使用される場合、一度に 1 ページのみ取得されます。 同期読み取りの転送単位は、単一の入出力操作につき 1 ページです。 Db2 同期I/Oによるコストのかかる待ち時間を回避するために、可能な限りダイナミックプリフェッチ、シーケンシャルプリフェッチ、リストプリフェッチなどのプリフェッチメカニズムを使用します。

プリフェッチとは、ページのセット (通常は 32 ページ) を、1 回の 非同期入出力操作でバッファー・プールに読み込むメカニズムです。 プリフェッチにより、CPU コストと入出力コストの両方が大幅に節約されます。 1 回のプリフェッチ操作で読み取られるページの最大数は、操作に使用されるバッファー・プールのサイズによって決まります。

Db2は、以下のタイプのプリフェッチを使用して、データ、索引およびLOBにアクセスするために、コストのかかる同期読み取りを使用しないようにします。
順次プリフェッチ
Db2は、索引アクセスが使用可能でない場合に、表スキャン、および複数表のセグメント化表スペース内のデータへの順次アクセスのために 順次プリフェッチ を使用します。
動的プリフェッチ
ダイナミックプリフェッチでは、 Db2 はページがシーケンシャルに読み込まれているかどうかを検出するシーケンシャル検出アルゴリズムを使用します。 Db2 クラスタ化されたページ、シーケンシャルなページ、ランダムなページを区別しようとします。 Db2 シーケンシャルページにはマルチページ非同期プリフェッチI/Oを、ランダムページには同期I/Oを使用します。

例えば、索引のクラスター率が 100% で、その索引に従いキーのシーケンス順で表が読み取られる場合、すべてのデータ・ページはクラスター化されており、順次読み取られます。 ただし、クラスター率が 100% よりやや低い場合、一部のページはランダムで、それらのページのみ同期入出力を使用して読み取られます。 動的プリフェッチは、順方向スキャンと逆方向スキャンの両方に対して動作します。

動的プリフェッチは順次検出を使用するので、順次プリフェッチよりも、アクセス・パターンの動的な変更に対応できます。 Db2 ほとんどの状況で動的プリフェッチを使用しますが、主な例外はテーブルスペーススキャンです。 索引スキャンでは、常に動的プリフェッチが使用されます。

リスト・プリフェッチ
Db2 リストプリフェッチ を使用して、インデックスまたは ログからのレコード識別子(RID)のリストによって決定されるデータページのセットを読み取ります。 Db2 Db2 また、非連続インデックスリーフページを読み込む際にもリストプリフェッチを使用します。これは、非リーフページから決定されるものです。また、LOBページを読み込む際にもLOBマップから決定されるリストプリフェッチを使用します。 他のタイプのプリフェッチと異なり、リスト・プリフェッチは、どのような種類の順次検出も使用しません。 その代わり、 Db2 は、以下のような特定の状況下では、リストプリフェッチを使用します
  • 未編成の索引のリーフ・ページを読み取る場合。
  • オプティマイザーがリスト・プリフェッチ・アクセス・パスを選択した場合。
  • 高速のログ適用操作。
  • 増分イメージ・コピー。
  • フラグメント化された LOB データへのアクセス。
  • RUNSTATS 表サンプリング。

Db2はRIDプールを使用して、リスト・プリフェッチのためのRIDリストを処理します。 RID プールのサイズは、MAXRBLK サブシステム・パラメーターの値で制御します。 リストプリフェッチ操作のRIDリスト処理を格納するのにRIDプールが小さすぎる場合、代わりにテーブルスペーススキャンが使用される場合があります。Db2 RID プールのサイズが小さすぎる場合、ワークファイルを使用して RID リストの処理を継続する可能性があります。 RID リスト処理の作業ファイルの使用については、MAXTEMPS_RID サブシステム・パラメーターの値で制御します。

順次スチールしきい値 (VPSEQT) を使用して、バッファー・プール内のランダムにアクセスされるページを保護できます。 ディスクからランダム・ページを読み取るより、順次ページを読み取る方が通常は高速であり、また順次ページには再アクセスする可能性が低いため、ランダム・ページを順次ページから保護することには利益があります。

すべてのプリフェッチI/Oは、 データベースサービスアドレス空間(ssnmDBM1 内のサービスリクエストブロックの下で実行されるため、プリフェッチI/OのI/O時間は、クラス2 CPU時間とは非同期です。 ページ取得操作が、プリフェッチ入出力が完了するのを待つ場合、クラス 3 の中断時間が「他の読み取り入出力」の中断としてキャプチャーされます。

プリフェッチ CPU 時間は、システム SRB 時間としてキャプチャーされます。 プリフェッチの CPU 時間は通常は短いですが、索引スキャンのために増大する場合があります。これは、プリフェッチ・エンジンが、圧縮されている索引ページを圧縮解除するためです。

プリフェッチで読み取られるページ数

次の表は、バッファー・プール・サイズ (4 KB、8 KB、16 KB、および 32 KB) ごとに、非同期入出力ごとにプリフェッチで読み取られるページ数を示しています。

表 1. プリフェッチで非同期入出力ごとに読み取られるページ数 (バッファー・プール・サイズ別)
バッファー・プール・サイズ バッファー数 順次および LOB リスト・プリフェッチによって読み取られるページ 動的および非 LOB リスト・プリフェッチによって読み取られるページ ユーティリティー順次プリフェッチによって読み取られるページ
4 KB VPSIZE < 224 8 8 16
225 < VPSIZE <1,000 16 16 32
1000 <= VPSIZE < 40,000
または
VPSIZE*VPSEQT < 40000
32 32 64
40,000 <= VPSIZE*VPSEQT < 80,000 64 32 64
80,000 <= VPSIZE*VPSEQT 64 32 128
8 KB VPSIZE < 48 4 4 8
48 < VPSIZE <400 8 8 16
400 < VPSIZE < 20,000 または
VPSIZE*VPSEQT
< 20000
16 16 32
20,000 <= VPSIZE*VPSEQT < 40,000 32 16 32
40,000 <= VPSIZE*VPSEQT 32 16 64
16 KB VPSIZE < 24 2 2 4
24 < VPSIZE < 200 4 4 8
200 <= VPSIZE< 10,000 または VPSIZE*VPSEQT < 10000 8 8 16
10,000 <= VPSIZE*VPSEQT < 20,000 16 8 16
20,000 <= VPSIZE*VPSEQT 16 8 32
32 KB VPSIZE < 12 1 1 2
12 < VPSIZE < 100 2 2 4
100 &lt;= VPSIZE&lt; 5,000
または
VPSIZE*VPSEQT &lt; 5,000
4 4 8
5,000 <= VPSIZE*VPSEQT < 10,000 8 4 8
10,000 <= VPSIZE*VPSEQT 8 4 16