複数のデータベース・パーティションにまたがるデータベース・パーティション化

データベース・マネージャーは、パーティション・データベースの複数のデータベース・パーティションにまたがってデータを柔軟に拡散させる操作を可能にします。

ユーザーは分散キーを宣言することにより、データを分散する方法を選択できます。また、データの保管場所となるデータベース・パーティション・グループと表スペースを選択することにより、いくつの、そしてどのデータベース・パーティションに表データを分散できるかを決定できます。

さらに、分散マップ (更新可能) は、分散キー値のデータベース・パーティションへのマッピングを指定します。 これにより、大きな表では 1 つのパーティション・データベース全体にまたがってワークロードを柔軟に均等化することができる一方、小さな表の場合はアプリケーション設計者の選択しだいで、1 つまたは少数のデータベース・パーティションに保管することもできます。 各ローカル・データベース・パーティションでは、そこに保管されるデータのローカル索引を作成して、パフォーマンスよくローカル・データにアクセスできます。

パーティション・データベースで、分散キーは一連のデータベース・パーティションに表データを分散するために使用されます。 索引データも、それに対応する表とともにパーティション化され、各データベース・パーティションにローカル保管されます。

データベース・パーティションを使用してデータを保管するには、事前にパーティションをデータベース・マネージャーに対して定義しておく必要があります。 データベース・パーティションは、db2nodes.cfgと呼ばれるファイルに定義されます。

パーティション・データベース・パーティション・グループの表スペースの表の分散キーは、CREATE TABLE ステートメント、または ALTER TABLE ステートメントに指定されます。 CREATE TABLE ステートメントで指定する場合、分散キーの選択は、使用する DISTRIBUTE BY 節によって異なります。
  • DISTRIBUTE BY HASHが指定される場合、分散キーは、HASHキーワードの後の列リストに明示的に含まれるキーです。
  • DISTRIBUTE BY RANDOMが指定されると、表が定義されたすべてのデータベース・パーティションにデータを均等に分散させるために、データベース・マネージャーによって分散キーが選択されます。 データベース・マネージャーがこれを行うために使用する方法が 2 つあります。
    • ユニーク別ランダム: 表にユニーク・キーまたは主キーが含まれる場合、キーの列のユニーク特性を使用して、データのランダム・スプレッドを作成します。 ユニーク・キーまたは主キーの列は、分散キーとして使用されます。
    • 生成別ランダム: 表にユニーク・キーも主キーも含まれない場合、データベース・マネージャーは、表に 1 つの列を挿入し、ハッシュ関数で使用する値を生成して生成値を保管します。 列は IMPLICITLY HIDDEN 文節を使用して作成されるため、明示的に指定しない限り、照会には表示されません。 その列の値は、新規行が表に追加されると自動的に生成されます。 デフォルトでは、列名は RANDOM_DISTRIBUTION_KEYです。 名前が既存の列と重複してしまう場合、重複しない名前がデータベース・マネージャーによって生成されます。
  • DISTRIBUTE BY REPLICATIONを指定すると、表内のすべてのデータコピーが各データベース・パーティションにあるため、分散キーは選択されません。 このオプションは、マテリアライズ照会表にのみ指定できます。
  • 指定されていない場合、表の分散キーがデフォルトで作成されます。 単一パーティション・データベース・パーティション・グループの表スペースの表は、明示的に指定されている場合に限り、分散キーを持ちます。
行は、以下のようにデータベース・パーティション内に配置されます。
  1. ハッシュ・アルゴリズム (データベース・パーティション機能) が分散キーのすべての列に適用され、その結果として分散マップの索引の値が生成されます。
  2. 分散マップで、その索引の値にあるデータベース・パーティション番号は、行が保管されるデータベース・パーティションを識別します。

データベース・マネージャーは、部分デクラスタリング をサポートします。これは、システム内のデータベース・パーティションのサブセット (つまりデータベース・パーティション・グループ) に表を配分できることを意味しています。 システム内のすべてのデータベース・パーティションにわたって表を配分する必要はありません。

データベース・マネージャーは、 結合や副照会でアクセスされているデータが同じデータベース・パーティション・グループ内の同じデータベース・パーティションにある場合に、それを認識する能力を備えています。 これを、表コロケーション といいます。 同一の分散キー値を使用して連結されている表の行は、同一のデータベース・パーティションに置かれます。 データベース・マネージャーは、 データが保管されているデータベース・パーティションでの結合処理や副照会処理の実行を選択できます。 これによって、大幅なパフォーマンスの改善が得られる場合もあります。

生成方法によるランダムを使うランダム分散表は、分散キーがRANDOM_DISTRIBUTION_KEY列の生成値に基づいているため、通常、表のコロケーションを利用できません。

連結する表は、以下の条件を満たしている必要があります。

  • 同一のデータベース・パーティション・グループにあり、再配分されていない。 (再分散中に、データベース・パーティション・グループ内の表は異なる分散マップを使用する可能性があります。これらは連結されません。)
  • 分散キーの列の数が同数である。
  • 分散キーの対応する列がデータベースの パーティション互換であること。
  • 単一パーティション表は、同じデータベース・パーティション・グループ内に定義されている場合のみ連結される。