管理の手引き


区画内並行操作の最適化方式

最適化プログラムは、SQL ステートメントのコンパイル時に並列操作の程度が指定された場合には、 照会をデータベース区画内で並列に実行するように、アクセス・プランの選択を行います。

実行時には、「サブエージェント」と呼ばれる複数のデータベース・エージェントが作成されて、 照会を実行します。 サブエージェントの数は、 SQL ステートメントのコンパイル時に決められた並列操作の程度以下になります。 SQL ステートメントの並列操作の程度の設定についての詳細は、 アプリケーションの並列処理を参照してください。 エージェントおよびサブエージェントの詳細については、 データベース・エージェントを参照してください。

区分データベースの場合には、並列操作の程度は各区画に適用されます。 たとえば、指定されたデータベース区画で実行される照会の一部分は、 その SQL ステートメントのそのデータベース区画に指定された並列化の程度に基づいて、 さらに並列化されます。

アクセス・プランを並列化するには、プランを、 各サブエージェントによって実行される部分と調整エージェントによって実行される部分とに分割します。 サブエージェントは、表待ち行列を介して、 データを調整エージェントか他のサブエージェントに渡します。 区分データベースでは、サブエージェントは、表待ち行列を介して、 他のデータベース区画のサブエージェントとの間でデータの送受信を行うことができます。

このセクションでは、単一データベース区画内での並列操作方式について説明します。

並列走査の方式

リレーショナル走査および索引走査は、 同じ表または索引上で並列して実行することができます。 並列リレーショナル走査の場合、表は、ページ範囲または行範囲に分割されます。 分割後、ページ範囲または行範囲がサブエージェントに割り当てられます。 サブエージェントは割り当てられた範囲を走査し、 その現行の範囲での作業が完了した時点で別の範囲が割り当てられます。

並列索引走査の場合には、索引は、索引キー値およびキー値あたりの索引項目数に基づいて、 レコード範囲に分割されます。 並列索引走査は、並列表走査と同様に、 レコード範囲を割り当てられたサブエージェントを使用して行われます。 サブエージェントには、現行の範囲での作業が完了した時点で新しい範囲が割り当てられます。

走査単位 (ページか行のいずれか) および走査の細分度は、 最適化プログラムによって決められます。

並列走査は、サブエージェント間で均等になるように作業を分配します。 並列走査の目標は、サブエージェント間の負荷を均衡させて、 サブエージェントが同等に使用されるようにすることです。 使用中のサブエージェントの数が使用可能なプロセッサーの数と等しく、 ディスクが入出力要求で過度に作動しているということがない場合には、 マシン・リソースは効率的に使用されていると言えます。

他のアクセス・プランの操作によっては、 照会の実行時にデータの不均衡が生じることがあります。 最適化プログラムは、データの均衡を維持できるように並列方式を選択します。

並列分類の方式

最適化プログラムは、以下のいずれかの並列分類方式を選択します。

ラウンドロビン分類

この分類は、「再分配分類」とも呼ばれます。 これは効率的な共用メモリー分類で、 すべてのサブエージェントに対して可能な限り均等にデータを再分配します。 この分類は、ラウンドロビン・クロック型アルゴリズムを使用して、 均等な分配を行います。 まず最初に、各サブエージェントごとに個々の分類を作成します。 挿入フェーズでは、サブエージェントは、ラウンドロビン様式で、 個々の分類のそれぞれに挿入を行います。 こうすることで、より均等にデータを分配することができます。

区分分類

この分類は、分類が各サブエージェントごとに作成されるという点では、 ラウンドロビン分類に似た働きをします。 この分類では、サブエージェントはハッシュ関数を分類列に適用して、 行をどの分類に挿入するかを判別します。 たとえば、マージ結合の内部と外部が区分分類の場合には、 サブエージェントはマージ結合を使用して、 対応する区画を結合することができます。 こうすることによって、マージ結合を並列に実行することができます。

複写分類

この分類は、すべてのサブエージェントがすべての分類出力を必要としている場合に使用されます。 ある分類が作成されると、サブエージェントはその分類の挿入時に同期化されます。 分類が完了すると、各サブエージェントが分類全体の読み取りを行います。 この分類は、行数が少ない場合に、 データ・ストリームのバランスをとり直すために使用することができます。

共用分類

この分類は、サブエージェントが分類結果上で並列走査をオープンする点以外は、 複写分類と同じ働きをします。 この分類は、ラウンドロビン分類と同様の方法で、 サブエージェント間にデータを分配します。

並列一時表

サブエージェントが共同して同じ表に行を挿入することによって、 一時表を生成することができます。 この表は、共用一時表と呼ばれます。 サブエージェントは、データ・ストリームが複写されるか区分化されるかに応じて、 私用走査または並列走査のいずれかを共用一時表上でオープンします。

並列集約の方式

集約操作は、サブエージェントによって並列に実行することができます。 集約操作では、データをグループ化列上に配列する必要があります。 サブエージェントがグループ化列の値の集合に関する行をすべて確実に受け取ることができれば、 集約を最後まで完全に実行できます。 これは、以前の区分分類のためにグループ化列上のストリームがすでに区分化されている場合に生じます。

上記以外の場合は、サブエージェントは部分的に集約を実行し、 別の方式を使用して集約を完了させます。 その方式は以下のとおりです。

並列結合の方式

結合操作は、サブエージェントによって並列に実行することができます。 並列結合の方式は、データ・ストリームの特性によって決められます。

結合は、結合の内部または外部において、データ・ストリームを区分化または複写 (あるいは、 その両方) することによって、並列化することができます。 たとえば、ネスト・ループ結合は、外部のストリームが並列走査のために区分化され、 さらに内部のストリームが各サブエージェントによって独立して再評価された場合に、 並列化することができます。 マージ結合は、内部ストリームおよび外部ストリームが区分分類のために値によって区分化された場合に、 並列化することができます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]