検索

パフォーマンスの要になるPIとPPI


データへの最短アクセスを提供するPI

Teradata の全てのテーブルは、1つ以上のカラムから構成される PI を必ず 1つ含んでいます。PIカラムの実体は、ユニークであってもノンユニークであっても構いません。例えば、前述の「従業員テーブル」において、値が全て異なる “社員ID” カラムを PI に指定すると、ユニーク・プライマリ・インデックス(UPI)が作成され、値が 2種類しかない “性別” カラムを PI に指定すると、ノンユニーク・プライマリ・インデックス(NUPI)が作成されます。

どのカラムを PI として選択してもテーブルの作成は可能で、データもきちんと格納することができます。ところが、PI の選択の仕方によって、その後のパフォーマンスや運用に大きな差が生じます。

先ほど、テーブル内の各行は PI をキーにして各AMP に分散される、と述べました。Teradata はデータを格納する際、PI の値を独自のハッシュ関数に渡し、ハッシュ値という数値を算出します。そして、求められたハッシュ値によって、行をどの AMP に格納するかを決定します。従って、PI の値が同じだと求められるハッシュ値も同じになるため、格納先も同じになります。性別カラムを PI にすると、同じ性別の人のデータは常に同じ AMP に格納されるため、たとえ AMP が 100個あるシステムでもその中の 2つしか使われないことになります。一方で、社員IDを PI にすれば、求められるハッシュ値は異なるため、データは各AMP に均等に分散されます。

PI をどのカラムに設定すべきかは、以下の 3つの観点から慎重に検討する必要があります。

データアクセス

データアクセスのパフォーマンスをいかに上げるかは、I/O をいかに減らすかにかかっています。その意味で、PI によるデータアクセスは単一AMP操作になるため、もっともパフォーマンスの良いアクセス方法になります。それぞれのテーブルで、アクセス条件として最も頻繁に使用されるカラムが PI の有力な候補になります。

データ分散

PI の値がノンユニークのとき、その固有性に極端な偏りがある(例えば、“勤務先” カラムの 95%が本社で 5%が他の営業所である)場合や、固有性が低い(“性別” カラムには M か F の 2種類の値しかない)場合は、パフォーマンスやディスクスペースの使用効率に影響が生じます。

データ更新

PI の値が変更されるとハッシュ値も変わってしまうため、該当データを別の AMP に再度格納し直すという作業が Teradata の内部で発生してしまいます。従って、なるべく値が一定していて変更が少ないカラムを PI に選択することが望ましいと言えます。

以上のことを考慮して適切な PIカラムを選択することで、Teradata の最高のパフォーマンスを保つことができます。

ハッシュ分散にレンジ分散の考えを取り込むことが可能なPPI

Teradata V2R5.0 から、テーブルにパーティションを設定する PPI という機能が取り入れられています。PPI を使用しても、PI の値をキーにして各行がそれぞれの AMP に分散されることに変わりありませんが、各AMP内のデータは PPI で指定したパーティション順にソートされます。

例えば月単位でパーティションを設定すれば、ある月に関するデータは特定のパーティションに格納されます。従って、PPIテーブルに対して範囲を限定したクエリーを実行すれば、全件検索ではなく該当するパーティションのみがアクセスされるため、パフォーマンスが格段に向上します。

PPI は主に以下のメリットをもたらします。

  • 範囲指定のあるクエリーのパフォーマンスが大幅に向上

  • “古い” データを瞬時に削除し、“新規” データを容易に追加できる

  • PPI を利用する際に、クエリーやアプリケーション側の変更は不要

オプティマイザー(*2) は、PPI の定義とクエリーの条件に基づいて、読み取りをスキップするパーティションのリストを作成します。これをパーティション・エリミネーション(パーティションの除外)と言い、PPI によるクエリーのパフォーマンス向上は、どれだけ多くのパーティションが除外されるかに依存します。

ただし、PPI は使用すれば必ずパフォーマンスが向上するというものではなく、乱用するとかえってパフォーマンスが悪化するケースもありますので注意が必要です。実際の導入に際しては総合的に効果を測定し、トレードオフを十分に評価してください。

まとめ

Teradataデータベースには、検索パフォーマンスを向上させるためのさまざまな機能が備わっています。しかしながら、それらのどの機能よりも PI によるアクセスが最も優れたパフォーマンスを発揮します。それだけに、どのカラムを PI にするかは、さまざまな要素を検討して決定すべきです。また、PPI を適切に利用することで飛躍的にパフォーマンスを改善する可能性もあります。Teradata の特徴や機能を理解して実装することで、Teradata の価値を最大限に引き出してください。

  • *1: AMP は Teradata に接続されているディスク・サブシステムを管理するプロセスです。各AMP は、物理ディスク領域の一部分を管理し、その領域内にテーブルの一部分が格納されます。

  • *2: オプティマイザーとは、SQL文と統計情報を解析して、要求されたデータに対する最も効率的なアクセス経路を構築する Teradata の最適化ルーチンです。


eventbanner.png