データベース・パーティション・グループ

データベース・パーティション・グループは、1 つのデータベースに属する、指定された 1 つ以上のデータベース・パーティションのセットです。

複数のデータベース・パーティションが含まれるデータベース・パーティション・グループを 複数パーティションのデータベース・パーティション・グループ と呼びます。 複数パーティションのデータベース・パーティション・グループは、 同じインスタンスに属するデータベース・パーティションでのみ定義することができます。

図1は、5つのデータベースパーティションを持つデータベースの例を示しています。
  • データベース・パーティション・グループ 1 には、1 つを除きすべてのデータベース・パーティションが含まれています。
  • データベース・パーティション・グループ 2 には、データベース・パーティションが 1 つ含まれています。
  • データベース・パーティション・グループ 3 には、2 つのデータベース・パーティションが含まれています。
  • グループ 2 のデータベース・パーティションは、グループ 1 によって共有されて (および、オーバーラップして) います。
  • グループ 3 の 1 つのデータベース・パーティションは、グループ 1 によって共有されて (および、オーバーラップして) います。
図1: データベース内のデータベース・パーティション・グループ
5つのデータベースパーティションは、3つのデータベースパーティショングループにグループ化されています。

データベースが作成されると、 db2nodes.cfg という名前の データベース区画構成ファイル に指定されているすべてのデータベース区画も作成されます。 ADD DBPARTITIONNUM または DROP DBPARTITIONNUM VERIFY コマンドを使用して、その他のデータベース・パーティションを追加または削除することができます。 データは、データベース・パーティション・グループ内のすべてのデータベース・パーティション間で分割されます。

データベース・パーティション・グループが作成されるときに、 分散マップ がそのグループに関連付けられます。 データベース・パーティション・グループ内のどのデータベース・パーティションに特定のデータ行を保管するかを決定するために、データベース・マネージャーは分散マップを分散キー およびハッシュ・アルゴリズムと共に使用します。

デフォルト・データベース・パーティション・グループ

データベース作成時に、以下の 3 つのデータベース・パーティション・グループが自動的に定義されます。
  • SYSCATSPACE 表スペース用の IBMCATGROUP (システム・カタログ表を保持します)
  • TEMPSPACE1 表スペース用の IBMTEMPGROUP (データベース処理の間に作成された一時表を保持します)
  • USERSPACE1 表スペース用の IBMDEFAULTGROUP (ユーザー表と索引を保持します)。 宣言済み一時表または作成済み一時表のための USER TEMPORARY 表スペースは、IBMDEFAULTGROUP または任意のユーザー作成のデータベース・パーティション・グループの中に作成できますが、IBMTEMPGROUP の中には作成できません。

データベース・パーティション・グループの表スペース

表スペースが、(CREATE TABLESPACE ステートメントの実行時に) 複数パーティションのデータベース・パーティション・グループに関連付けられている場合、その表スペース内のすべての表は、そのデータベース・パーティション・グループ内の各データベース・パーティションにわたって、パーティション化されます。 あるデータベース・パーティション・グループに関連付けられている表スペースを、後から別のデータベース・パーティション・グループに関連付けることはできません。

データベース・パーティション・グループの作成

CREATE DATABASE PARTITION GROUP ステートメントを使用して、データベース・パーティション・グループを作成します。 このステートメントは、 表スペース・コンテナーおよび表データが存在するデータベース・パーティションのセットを指定します。 このステートメントは、以下のアクションも実行します。
  • データベース・パーティション・グループに対する分散マップを作成します。
  • 分散マップ ID を生成します。
  • 以下のカタログ・ビューにレコードを挿入します。
    • SYSCAT.DBPARTITIONGROUPDEF
    • SYSCAT.DBPARTITIONGROUPS
    • SYSCAT.PARTITIONMAPS

データベース・パーティション・グループの変更

データベース・パーティション・グループでデータベース・パーティションを追加したりドロップしたりするには、ALTER DATABASE PARTITION GROUP ステートメントを使用します。 データベースパーティションを追加または削除した後、 REDISTRIBUTE DATABASE PARTITION GROUP コマンドを使用して、データベースパーティショングループ内のデータベースパーティションセット全体にデータを再分散します。

データベース・パーティション・グループの設計の考慮事項

小さな表は、大きな表とのコロケーションを利用する場合を除き、単一パーティションのデータベース・パーティション・グループの中に置いてください。 コロケーションとは、同じデータベース・パーティションにある、 関連データが入った複数の異なる表からの行を配置することです。 より効率的な結合ストラテジーを使用するために、データベース・マネージャーはコロケーションによって連結された表を活用できます。 このような表は、1 つの単一パーティションのデータベース・パーティション・グループの中に存在することができます。 複数の表が 1 つの複数パーティションのデータベース・パーティション・グループの中に存在し、分散キーの中に同数の列を持ち、対応する列のデータ・タイプに互換性がある場合、それらの表はコロケーションによって連結されていると見なされます。 同じ分散キー値を持つ連結された表の中の行は、同じデータベース・パーティションに置かれます。 それぞれの表が同じデータベース・パーティション・グループの中の別個の表スペースの中に入っていても、 連結されていると見なされます。

中間的なサイズの表を、あまりに多くのデータベース・パーティションにわたって拡張することは避けてください。 例えば、100 MB の表の場合、32 パーティションから成るデータベース・パーティション・グループよりも、16 パーティションから成るデータベース・パーティション・グループの方がパフォーマンスが良くなる可能性があります。

データベース・パーティション・グループを使用して、 オンライン・トランザクション処理 (OLTP) の表を意思決定支援 (DSS) の表と分離します。 これによって、OLTP トランザクションのパフォーマンス低下を防ぐことができます。

複数パーティションのデータベース・パーティション・グループを使用している場合は、 以下のポイントを考慮してください。
  • 複数パーティションのデータベース・パーティション・グループでは、 索引が分散キーのスーパーセットである場合にのみ、 ユニーク索引を作成することができます。
  • 同じデータベース・パーティションが 1 つ以上のデータベース・パーティション・グループに含まれる場合があるため、各データベース・パーティションに固有の番号を割り当てる必要があります。
  • システム・カタログ表を含んでいるデータベース・パーティションを速やかにリカバリーさせるためには、 同じデータベース・パーティションにユーザー表を入れないようにしてください。 IBMCATGROUP データベース・パーティション・グループのデータベース・パーティションを含まないデータベース・パーティション・グループの中に、ユーザー表を入れます。