検索

実行プランをレポートするEXPLAINとTeradata Visual Explain


EXPLAIN で何が分かるか

EXPLAIN を使わなくても、もちろんクエリーを実行することはできます。しかし、EXPLAIN を一度も確認しないで複雑なクエリーを実行することは、金額を確認しないで買い物をするようなものであり、時に予想もしない高いコストを要求されることがあります。

EXPLAIN は、EXPLAIN 自身を除くあらゆる SQL文の先頭に付けることができます。EXPLAIN という修飾子を SQL文の前に付けることによって、オプティマイザーが選択した実行ステップが英文でレポートされます(例1)。その際、SQL文は構文解析まで行われますが実行はされませんので、システムのリソースは殆ど消費されません。

オプティマイザーの判断は絶対的であるため、その動作を直接コントロールすることはできません。ただし、EXPLAIN によって生成されたレポートを評価することで、オプティマイザーが何をしようとしているのかを知ることができるため、プランに問題がある場合はその原因を究明して、SQL の記述の変更、統計情報の収集、あるいはセカンダリ・インデックスの作成といった対処ができます。これによって、予期しないプロダクト・ジョインや大量データの再配置などを未然に防ぐことができます(例2)。このように、テーブルのジョインや複雑なクエリーを発行する際は、事前に EXPLAIN を実行して Teradataデータベースが実行しようとしているプランを確認することをお勧めします。

EXPLAIN は、主に以下のような項目を確認する際に使用します。

  • アクセス・パスの確認

  • ロック方法の確認

  • インデックスの使用状況の確認

  • トリガーやジョイン・インデックスによるアクセスの確認

  • クエリー実行時間の見積もり

EXPLAIN の主なキーワード

EXPLAIN文は平易な英文のレポートで出力されますが、以下のようないくつかのキーワードを知っておくことで、より容易に内容を理解することができます。

Estimated size ... この値は、スプール・ファイルの大きさを見積もるために用いられます。統計情報が収集されていない場合は、この値は信頼できません。

Estimated time ...この概算時間は、操作全体を構成するサブオペレーションの平均時間と、概算行数を基に見積もられています。

... with no residual conditions ... あらゆる条件は全ての行に適用されました。

... (last use) ... スプール・ファイルは既に必要なく、このステップのあと解放されます。

... END TRANSACTION... トランザクション・ロックはリリースされ、変更はコミットされました。

... eliminating duplicate rows ... DISTINCT操作でスプール・ファイル内の重複行を消去しています。

... by way of the sort key in spool field1 ... 該当フィールドのソートが行われました。

... we do an ABORT test ... ロールバックまたはアボート文が検出されました。

... which is redistributed by hash code to all AMPs. ... which is duplicated on all AMPs. ジョイン操作の準備のためにデータの再配置を行っています。

TWO-AMP RETRIEVE step by way of unique index #n ... ユニーク・セカンダリ・インデックス(USI)を基にテーブルの行が選択されました。

...we do an SMS (set manipulation step) ... UNION、MINUS、または INTERSECT 操作によって行われるセット操作(*1)ステップを行っています。

...we do a BMSMS (bit map set manipulation step) ... NUSI のビットマップ操作(*2)を行っています。

また、EXPLAIN には出力内容の確信度を表すいくつかのキーワードが含まれます。統計情報が収集されていれば確信度は高くなり、収集されていなければ確信度は低くなります。

... with high confidence ... インデックスまたはカラムで利用可能な統計情報がある場合。

... Join Index confidence ... ユニーク・インデックスに基づいたジョインの場合。

... with low confidence ... インデックスのランダム・サンプリングの場合。もしくは、利用可能な統計情報はあるが、AND/OR 条件が存在する場合。

... with no confidence ... 統計情報が収集されておらず、ランダム・サンプリングの場合。

Teradata Visual Explain

Teradata Visual Explain (Teradata VE)は、EXPLAIN の機能を拡張し、あらゆる SQL の実行プランをグラフィカルに表示する Microsoft Windows上で稼働するユーティリティです(図1)。各実行ステップがビジュアルなフローで表示されるため、Teradata のオプティマイザーが選択した特定のプランを視覚的に理解できます。Teradata VE 上で、データベース・オブジェクトの定義、データのデモグラフィック、見積もりコストなど、実行プランの解析に必要なあらゆる情報を確認することができます。また、Teradata VE は比較機能も備えているため、複数のプランを同一 GUI 上で比較・検討することもできます。

まとめ

Teradata データベース上で、SQL がどのような手順を経て実行されるのかを知る方法が EXPLAIN です。複雑な SQL を実行する前に EXPLAIN を実施し、その出力レポートを分析して適切に対処することで、無駄なプロダクト・ジョインや大量データの再配置を防止することができます。EXPLAIN は平易な英文のレポートを出力しますが、いくつかのキーワードを理解しておくことで内容の把握が容易になります。また、Teradata VE を使えば、各実行ステップがビジュアルに表示され、さらに複数のプランを比較することもできるため、より迅速で多面的な分析が可能になります。

  • *1: セット操作とは、UNION、EXCEPT、INTERSECT などの集合演算子に係る操作のこと。

  • *2: ビットマップ操作とは、アクセス対象の基本行を減らすために、複数の NUSI で共通する行 ID を検出する手法。


eventbanner.png