MPP データベースの表のハッシュ分散キーの選択

効果的なハッシュ分散キーを選択するためには、表の定義と、表に対して発行される照会について調査する必要があります。

始める前に

効果的なハッシュ分散キーを選択するには、表に関する情報と表の使用され方に関する情報を集める必要があります。

  • 表定義 - 主キー、ユニーク・キー、生成列、列のデータ・タイプ
  • 表データ - 固有値の数、値の分散
  • 表に対して発行される照会 - 結合、等価述部

このタスクについて

MPP データベースでは、クラスター内のすべてのノードのシステム・リソース (メモリー、ストレージ、プロセッサーなどのリソース) が、データ・スライス という論理的な単位に分割されます。 ハッシュ分散を使用すると、データベース・マネージャーは、分散キーの列値にハッシュ・アルゴリズムを適用して、表の行データをデータ・スライスの間に分散させます。

効果的なハッシュ分散キーを使用すると、以下の 2 つの異なる方法で、照会のパフォーマンスを向上させることができます。

  • すべてのデータ・スライスの間で表データを均等に分散させる

    均等に分散させると、以下の利点があります。
    • 照会処理を最大限に並列化できる
    • 使用可能なストレージ・スペースを効率的に使用できる
  • 別々の表から一緒に取り出されることが多い行をコロケートする (同じ場所に置く)

    一緒に取り出されることが多い行を同じデータ・スライス上に配置すると、それらの行の取り出しに要する時間が短縮されます。

一般には、行のコロケートよりも均等分散を優先してください。

小さい表では、分散キーが照会のパフォーマンスに与える影響は小さくなります。 大きい表では、分散キーが照会のパフォーマンスに与える影響は大きくなります。

手順

表のすべての列を分散キーの候補と見なしたうえで、次の 4 つの基準に従って列を除外または列を選択していきます。
  1. 表定義
    • 表に強制主キーがある場合、分散キーの列は、主キーの列のサブセットでなければなりません。
    • 表に強制ユニーク・キーがある場合、分散キーの列は、そのユニーク・キーの列のサブセットでなければなりません。
    • 分散キーとしてサポートされない次の生成列がある場合は、検討対象から除外します。
      • ROW CHANGE TIMESTAMP
      • ROW BEGIN
      • ROW END
      • TRANSACTION START ID
    • 分散キーでサポートされていないデータ・タイプの列を検討から除外します。
      • Long (例: long varchar、long vargraphic)
      • ラージ・オブジェクト (例: BLOB、CLOB、DBCLOB)
      • XML
      • long、ラージ・オブジェクト、または XML データ・タイプに基づく特殊タイプ
      • 構造化タイプ
  2. 表データ
    • 固有値が多く、値が均等に分散している列 (あるいは、そのような列になると想定される列) を選択します。
    • NULL 値が多い列は、検討対象から除外します。
  3. 照会
    • 別々の表から一緒に取り出されることが多い行をコロケートする場合には、両方の表の以下の要素について検討します。
      • 結合に表が含まれる場合は、照会の結合述部で使用される列を選択します。
      • 他の表の列との等価テストを行う照会に表が含まれる場合は、等価テストで使用される列を選択します。
  4. 一般
    • できる限り少ない数の列を選択します。これにより、別々の表から一緒に取り出されることが多い行をコロケートできる可能性が高くなります。

以下の列を持つ表 EMPLOYEE について考えてみましょう。

CREATE TABLE EMPLOYEE                    
(
  ID INT NOT NULL,
  NAME VARCHAR(250) NOT NULL,
  RESUME CLOB,
  HIRE_DATE DATE,
  IS_MANAGER CHAR(1),
  OFFICE_NUMBER INT
)
ORGANIZE BY ROW

追加情報:

  • IS_MANAGER 列の値は、「Y」または「N」のみです。
  • マネージャーは、この表と SALES という別の表に対して定期的に照会を発行して、従業員別の合計売上高のレポートを生成する必要があります。
    
    ... WHERE SALES.SALES_PERSON_ID = EMPLOYEE.ID ...
    
  • この会社はまだ設立 1 年であり、従業員の 50% は昨年の 7 月に雇用されています。

以下のロジックを使用して、EMPLOYEE 表のハッシュ分散キーを選択します。

表 1. EMPLOYEE 表のハッシュ分散キーを選択するためのロジック. この表は、EMPLOYEE 表のハッシュ分散キーを選択するために 4 つの基準を適用する方法を説明しています。
基準 説明
表定義
  • RESUME 列は、サポートされないデータ・タイプであるため、分散キーに含められません。

残った候補:

  • ID
  • NAME
  • HIRE_DATE
  • IS_MANAGER
  • OFFICE_NUMBER
表データ
  • 従業員の 50% が昨年 7 月に雇用されているため、HIRE_DATE の値は、多数の固有値に均等に分散してはいません。
  • IS_MANAGER 列の値は、「Y」または「N」のみであるため、固有値は多くありません。

残った候補:

  • ID
  • NAME
  • OFFICE_NUMBER
照会
  • この表に対して発行する照会では、ID 列の値を別の表の列の値と比較するので、ID 列を分散キーに含める必要があります。

推奨:

  • ID

残った候補:

  • NAME
  • OFFICE_NUMBER
一般
  • 一般の指針として、含める列の数はできる限り少なくする必要があり、また、OFFICE_NUMBER 列または NAME 列のいずれかを分散キーに含める必要があることを示す情報はここにないため、 これらの 2 つの列を検討対象から除外します。

分散キー: (ID)