17.10 - 使用上の注意 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-171K-JPN
Language
日本語 (日本)

呼び出し

通常は、クライアント ベースのデータベース問合わせ分析ツールを使用して呼び出されます。

INSERT EXPLAINの使用上のルール

INSERT EXPLAINの使用時には、次のルールが適用されます。
  • テーブルのリストを指定する場合で、SQL_statementによって参照されるテーブルが指定されたテーブルのリストに1つも含まれていない場合は、エラーが返されます。
  • テーブルのリストを指定する場合で、SQL_statementによって参照されるすべてのテーブルが指定されたテーブルのリストに含まれていない場合は、エラーは返されませんが、一致しないテーブルは無視されます。

既存のQCDなしのINSERT EXPLAINのアクション

INSERT EXPLAINを初めて実行する前に、既存のQCD_nameデータベースが存在していることを確認してください。

INSERT EXPLAINリクエストを実行するときに、QCD_nameデータベースまたはそのテーブルのいずれか1つでも存在しない場合、あるいは1つ以上のQCD_nameデータベース テーブルに対するINSERT権限がない場合は、適切なエラー メッセージが表示され、リクエストの実行が終了します。

WITH STATISTICSおよびFOR frequencyオプションを使用したインデックス分析ワークロードの作成

INSERT EXPLAINにWITH STATISTICSオプションを指定すると、サンプル テーブルのカーディナリティの見積もりおよび列統計が、QCDデータベースのTableStatisticsテーブルにキャプチャされます。最適化ルーチンにインデックス推奨事項がある保証は、QCDテーブルStatsRecsのLevel列に表現されます。StatsRecテーブルの詳細については、<Teradata Vantage™ - SQLリクエストおよびトランザクション処理、B035-1142>のクエリー キャプチャ機能に関する詳細情報を参照してください。

WITH STATISTICS句を使用してキャプチャされたサンプル統計は、COLLECT STATISTICS (QCD形式)リクエストおよびCOLLECTリクエストを実行することでキャプチャされるものと同じです。詳細については、Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184を参照してください。

SQLリクエストが分析される回数を見積もるFOR frequency 句は、通常は実行依頼されたワークロードの間に実行されます。

INSERT EXPLAIN WITH STATISTICSを指定した場合の新しい統計の収集

INSERT EXPLAIN WITH STATISTICSは、table_nameのDBC.TVFieldsに候補インデックス列が存在しない場合にのみ、新しいサンプル統計を収集します。存在する場合は、サンプルに基づいているかどうかに関係なく、既存の統計がQCDにコピーされ、再収集されることはありません。これによって、非サンプル統計が利用可能であれば、インデックス分析プロセスでその統計が十分に活用されるようになります。

INSERT EXPLAINで実行されるアクション

INSERT EXPLAINは、以下の動作を示されている順序で実行します。
  1. SQL_statementで指定されたSQL DMLリクエストにEXPLAINを実行して、最適化ルーチン空白ツリーを生成する。
  2. EXPLAINから最適化ルーチン空白ツリー出力をキャプチャする。
  3. ユーザーによって指定された問合わせキャプチャ データベースの適切なテーブルに出力を書き込む。
オプション 説明
USING SAMPLE システムがテーブルの基数に基づいてサンプル サイズを選択するのではなく、指定されたサンプル サイズの統計を母集団から収集します。
CHECK STATISTICS 収集を推奨する統計のセットを生成し、その推奨事項をStatsRec QCDテーブルに保管します。

IN XMLオプションを指定する場合、これらのオプションはどちらも指定できません。

INSERT EXPLAINは、複文リクエスト内では無効

複文リクエストの一部としてINSERT EXPLAINリクエストを実行することはできませんが、複文リクエストにINSERT EXPLAINリクエストを実行することはできます。INSERT EXPLAINリクエストを含む複文リクエストを実行しようとすると、その複文リクエストでエラーが返されます。

次の例で示すINSERT EXPLAINリクエストは、複文リクエストで有効な文のように見えますが、実際には、このリクエストによってその後の複文リクエストのクエリー計画がキャプチャされます。つまり、このINSERT EXPLAINリクエストは、複文リクエストの一部ではないということです。結果として、このリクエストは他のINSERT EXPLAINと同様に扱われ、正常に完了します。

INSERT EXPLAIN INTO qcd SELECT * FROM d1.t1
;SELECT * FROM d1.t1;
  *** Insert completed. One row added.
  *** Total elapsed time was 1 second.

INSERT EXPLAINの結果に対するデータ パーセル参照の効果

データ パーセルがINSERT EXPLAINリクエストとともに実行されると、計画がUSINGとCURRENT_DATEやDATE値、または両方の値を参照して生成されることがあります。これらの値が検査される場合、問合わせ計画によってこれらが示されます。

データ パーセルがINSERT EXPLAINリクエストとともに実行されない場合、結果の計画がUSING、CURRENT_DATEやDATE値を参照しないで生成されます。つまり定義による全般計画です。Teradata System Emulation Tool は、INSERT EXPLAINリクエストを使用してクエリー計画の取得中に入力としてUSINGデータを受け付けません。ただし、リクエストがBTEQを使用して実行された場合は除きます。

INSERT EXPLAIN出力のXMLドキュメントとしてのキャプチャ

INSERT EXPLAINのIN XMLオプションにより、XML出力を生成しないINSERT EXPLAINリクエストで作成されるクエリー計画の等価表現機能が提供されます。

IN XMLオプションを指定していない場合、処理に数分かかるINSERT EXPLAIN操作が、XMLファイルとして情報をキャプチャすると数秒で完了します。これは、INSERT EXPLAIN IN XMLリクエストでは、リクエストの出力全体を単一のXMLファイルの1つ以上の断片(1断片31,000バイト)として格納することによって、挿入操作を1回のみ実行するためです。INSERT EXPLAINでQCDテーブルXMLQCDにXMLデータを挿入すると、QCDテーブルSeqNumberも更新されるためです。ただし、SeqNumberの更新は問題になるほどの操作ではありません。

IN XMLオプションを指定すると、データベースはXMLQCDおよびSeqNumber以外のQCDテーブルを更新しません。これは、複数のQCDテーブルに挿入操作を行なう必要がある標準的なINSERT EXPLAINリクエストとは異なります。

単一のQCDテーブルで、XMLQCDは標準的なINSERT EXPLAIN QCDデータ収集操作を大幅に上回るパフォーマンスを発揮します。XMLQCDテーブルの定義については、<Teradata Vantage™ - SQLリクエストおよびトランザクション処理、B035-1142>を参照してください。

BEGIN QUERY LOGGING文とREPLACE QUERY LOGGING文の同様のオプションを指定すると、単一のDBQLテーブル(DBC.DBQLXMLTbl)に保管できるコンパクトなXMLバージョンのQCD情報が作成されるので、機能を相互補完できます。

XMLPLAN問合わせロギングは、INSERT EXPLAINリクエストでキャプチャされる情報をキャプチャするための代替方法にはなりません。
  • これら2つの方法には、生成される文書の内容の違い以外に、問合わせの実行に関する重要な違いがあります。
BEGIN QUERY LOGGING XMLPLAN INSERT EXPLAINの説明
実行されたクエリーの、クエリー計画をログに記録します。 問合わせを実行なしで、問合わせ計画をキャプチャします。

XMLPLANロギングは、実行中のワークロードに対する問合わせ計画を記録しようと考えていて、INSERT EXPLAINを使用してそのワークロードの問合わせ計画をキャプチャするには遅すぎると考えている場合には理想的です。

クエリーを調整しているだけで、そのクエリーを実行するつもりがないときには、リクエストのクエリー計画をキャプチャするためのXMLPLANロギングは、INSERT EXPLAINリクエストを使用する場合ほど便利なものではありません。

この場合には、INSERT EXPLAIN INTO QCD_name IN XMLリクエスト、またはEXPLAIN IN XML SQL_requestを実行する方法が、実行可能な代替手段となります。XML形式によるEXPLAINテキスト出力のキャプチャを参照してください。
  • 従来のDBQLテーブルからの実行時の情報は、ログ記録計画でもキャプチャできます。
  • XMLPLANロギングは、問合わせキャプチャ機能に対する拡張というよりも、問合わせロギングの拡張といえます。