パーティション・データベースでの結合ストラテジー

パーティション・データベース環境での結合ストラテジーは、非パーティション・データベース環境でのストラテジーとは異なる場合があります。 パフォーマンスを改善するために、標準の結合方式に加えて別の技法を適用することができます。

頻繁に結合が行われる表では、表コロケーションを考慮する必要があります。 パーティション・データベース環境では、表コロケーション とは、 互換性のあるパーティション・キーの数が同じである 2 つの表が、同じデータベース・パーティション・グループに保管されている場合に生じる状態のことです。 この状態になると、結合処理はそのデータが保管されているデータベース・パーティションで実行できるようになり、結果セットをコーディネーター・データベース・パーティションに移動するだけで済みます。

表キュー

パーティション・データベース環境での結合技法の説明は以下の用語を使用します。
  • 表キュー (TQ と呼ばれることもある) は、データベース・パーティション間 (または、 単一パーティション・データベースの場合はプロセッサー間) で行を転送するための機構です。
  • 指示表キュー (DTQ と呼ばれることもある) は、行が受信データベース・パーティションの 1 つにハッシュされる表キューです。
  • ブロードキャスト表キュー (BTQ と呼ばれることもある) は、行がすべての受信データベース・パーティションに送信されるが、ハッシュは行われない表キューです。
表キューは、次の方法で表データを渡す場合に使用されます。
  • パーティション間並列処理の使用時に、あるデータベース・パーティションから別のデータベース・パーティションに渡す
  • パーティション内並列処理の使用時に、データベース・パーティション内で渡す
  • 単一パーティション・データベースの使用時に、データベース・パーティション内で渡す
各表キューは単一方向にデータを渡します。 コンパイラーはどこで表キューが必要とされているかを判断し、 それらをプランに組み込みます。 プランが実行されると、データベース・パーティション間の接続を行うとその表キューが開始されます。 表キューがクローズされるのは、処理が終了したときです。
表キューには、以下に示すようにいくつかの種類があります。
  • 非同期表キュー

    これらの表キューが非同期と呼ばれるのは、アプリケーションからフェッチ要求が出される前に、行の読み取りを行うためです。 FETCH ステートメントが出されたときには、行はこの表キューから取り出されます。

    非同期表キューは、SELECT ステートメントに FOR FETCH ONLY 節を指定した場合に使用されます。 行の取り出しだけを行う場合には、非同期表キューが他よりも速い方法になります。

  • 同期表キュー

    これらの表キューが同期と呼ばれるのは、アプリケーションによって FETCH ステートメントが出されるたびに行を 1 行読み取るためです。 各データベース・パーティションでは、カーソルが、 そのデータベース・パーティションから次に読み取られる行に位置づけられます。

    同期表キューは、 SELECT ステートメントに FOR FETCH ONLY 節が指定されていない場合に使用されます。 パーティション・データベース環境では、行の更新を行う場合には、データベース・マネージャーは同期表キューを使用します。

  • マージ表キュー

    これらの表キューは、順序を保存します。

  • 非マージ表キュー

    これらの表キューは正規表キュー とも呼ばれ、順序を保持しません。

  • Listener 表キュー (LTQ と呼ばれることもある)

    これらの表キューは、相関副照会とともに使用されます。 相関値が副照会に渡された後、このタイプの表キューを使用して、結果が親照会ブロックに戻されます。