表スペースの特性のうちのあるものは、 SQL コンパイラーによって選択されるアクセス・プランに影響を与える可能性があります。
コンテナー特性は、 照会の実行時に関連付けられた入出力のコストに重大な影響を与える可能性があります。 アクセス・プランを選択するとき、SQL 最適化プログラムは、 異なる複数の表スペースのデータにアクセスする場合のコストの相違も含めて、 それらの入出力コストを考慮に入れます。 最適化プログラムが表スペースのデータにアクセスするための入出力コストを見積もるときに、 SYSCAT.TABLESPACES システム・カタログの 2 つの列が使用されます。
以下の式を使って、オーバーヘッドのコストを見積もることができます。
OVERHEAD = ミリ秒単位の平均シーク時間 + (0.5 * 回転待ち時間)
ここで、
(1 / RPM) * 60 * 1000
ここで、
たとえば、ディスクの 1 分当たりの回転数が 7 200 であるとします。 この場合、回転待ち時間は次の式のようになります。
(1 / 7200) * 60 * 1000 = 8.328 ミリ秒
この値は、想定される 11 ミリ秒の平均シーク時間と共に、 次のように OVERHEAD 見積もりの計算に使用することができます。
OVERHEAD = 11 + (0.5 * 8.328) = 15.164
見積もられた OVERHEAD 値が約 15 ミリ秒となります。
それぞれの表スペース・コンテナーが単一の物理ディスクである場合は、 以下の式を使って、転送コストを 1 ページ当たりのミリ秒数で見積もることができます。
TRANSFERRATE = (1 / spec_rate) * 1000 / 1 024 000 * page_size
ここで、
たとえば、ディスクの指定率が 1 秒当たり 3 MB であるとします。 この場合、次の計算が行われます。
TRANSFERRATE = (1 / 3) * 1000 / 1024000 * 4096 = 1.333248
見積もられた TRANSFERRATE 値は、ページ当たり約 1.3 ミリ秒になります。
表スペース・コンテナーが単一の物理ディスクではなく、 (RAID などの) ディスク・アレイである場合、 使用する TRANSFERRATE を決定しようとするときに追加の考慮事項があります。 アレイが比較的小さい場合は、障害はディスク・レベルにあると想定して、 spec_rate にディスクの数を乗算することができます。 しかし、コンテナーを構成しているアレイ内のディスクの数が多ければ、 障害はディスク・レベルではなく、ディスク制御装置、入出力バス、 またはシステム・バスなどのその他の入出力サブシステム構成装置の 1 つに存在する可能性もあります。 この場合、入出力スループット能力は、 spec_rate とディスクの数の積であるとは想定できません。 順次走査中に、実際の入出力率 (MB 単位) を測定する必要があります。 たとえば、順次走査は select count(*) from big_table となり、 サイズは MB 単位となります。 この数を、big_table が存在している表スペースを構成するコンテナーの数で除算します。 上記の式の spec_rate をこの計算結果で置き換えます。 たとえば、 4 つのコンテナー表スペースの中の表を走査している間に測定された 100 MB の順次入出力率は、 コンテナー当たり 25 MB となるか、 TRANSFERRATE がページ当たり (1/25) * 1000 / 1024000 * 4096 = 0.16 ミリ秒となります。
表スペースに割り当てられたコンテナーは、 それぞれ異なる物理ディスク上に存在しています。 最適の結果を得るためには、 所定の表スペースに使用されるすべての物理ディスクの OVERHEAD および TRANSFERRATE の特性が同じでなければなりません。 これらの特性が同じでない場合には、 OVERHEAD および TRANSFERRATE の値を設定するときには平均値を使用する必要があります。
これらの列の媒体特有の値は、ハードウェア仕様から、 または実験によって得ることができます。 これらの値は、CREATE TABLESPACE および ALTER TABLESPACE ステートメントで指定できます。
コンテナーとしてディスク・アレイを使用している上記のような環境では、実験は特に重要です。 データを移動させる単純な照会を作成して、 その照会をプラットフォーム固有の測定ユーティリティーと一緒に使用する必要があります。 その後、表スペース内の異なるコンテナー構成についてその照会を再実行します。 CREATE および ALTER TABLESPACE ステートメントを使用して、 現在の環境でデータが転送された方法を変更することができます。
これら 2 つの値による入出力コスト情報は、 いくつかの方法で最適化プログラムに影響を与える可能性があります。 データにアクセスするのに索引を使用するかどうか、または 1 つの結合の中で 内部と外部にどの表を選択するか、などがこれに含まれます。
表スペースのデータにアクセスするための入出力コストを考慮するとき、 最適化プログラムは、ディスクからデータおよび索引ページを事前取り出しすることによって、 照会のパフォーマンスに与える潜在的な影響も考慮します。 データおよび索引ページの事前取り出しを行うと、 データをバッファー・プールに読み込むことに関連するオーバーヘッドと待ち時間が少なくなります。 詳細については、バッファー・プールへのデータの事前取り出しを参照してください。
最適化プログラムは SYSCAT.TABLESPACES の PREFETCHSIZE 列および EXTENTSIZE 列の情報を使用して、 表スペースに関して生じる取り出しの量を見積もります。
次に、RESOURCE 表スペースの特性を変更するための構文の例を示します。
ALTER TABLESPACE RESOURCE PREFETCHSIZE 64 OVERHEAD 19.3 TRANSFERRATE 0.9
表スペースに対して変更を行った後は、アプリケーションの再バインドを考慮して、 最適なアクセス・プランが使用されるように、 RUNSTATS ユーティリティーを用いて索引に関する最新の統計を収集する必要があります。