ablog

不器用で落着きのない技術者のメモ

SYS_QUERY_HISTORY の execution_time は queue_time/lock_wait_time/planinng_time/compile_time を含まない

Redshift で SYS_QUERY_HISTORY の execution_time は queue_time/lock_wait_time/planinng_time/compile_time を含まない。


[クエリの詳細] ページには、次のコンポーネントがあります。

  • 上部ペイン - ページの上部ペインには、ステータスやタイプなど、クエリの詳細が表示されます。上部ペインに表示される情報のソースについては、「Amazon Redshift データベースデベロッパーガイド」の「SYS_QUERY_HISTORY」を参照してください
Query profiler - Amazon Redshift

テーブルの列

列名 データ型 説明
execution_time bigint サービスクラスで実行されている合計時間 (マイクロ秒)。
SYS_QUERY_HISTORY - Amazon Redshift

  1. リーダーノードはクエリを受け取り、SQL を解析します。
  2. クエリツリーパーサーは、元のクエリの論理的な表現である初期クエリツリーを生成します。次に、Amazon Redshift は、このクエリツリーをクエリオプティマイザに入力します。
  3. オプティマイザは、クエリを評価し、必要に応じて書き換えて効率を最大限に高めます。このプロセスにより、関連するクエリが複数作成されて、単一のクエリが置き換えられることがあります。
  4. オプティマイザは、最高のパフォーマンスで実行されるように 1 つのクエリプラン (または、前のステップで複数のクエリが生成された場合は複数のクエリプラン) を生成します。クエリプランは、結合の種類、結合の順序、集計オプション、データ分散要件などの実行オプションを指定します。クエリプランを表示するには、EXPLAINコマンドを使用できます。クエリプランは、複雑なクエリを分析およびチューニングするための基本ツールです。詳細については、「クエリプランの作成と解釈」を参照してください。
  5. 実行エンジンは、クエリプランをステップ、セグメント、ストリームに変換します。
    • Step 各ステップは、クエリ実行時に必要な別個の操作です。コンピューティングノードはステップを組み合わせることによってクエリ、結合、または他のデータベース操作を実行できます。
    • Segment 1 つのプロセスで実行できる複数のステップの組み合わせ。コンピューティングノードスライスによって実行可能な最小コンパイル単位でもあります。スライスは、Amazon Redshift の並列処理単位です。並行して実行されるストリーム内のセグメント。
    • ストリーム 使用できるコンピューティングノードスライスに並列化するセグメントのコレクション。
  6. コンピューティングノードスライスは、クエリセグメントを並列的に実行します。このプロセスの一部として、Amazon Redshift は、最適化されたネットワーク通信、メモリ、ディスク管理を利用して、クエリプランのステップから次のステップに中間結果を渡します。これは、クエリ実行の高速化にも役立ちます。

ステップ 5 と 6 はストリームごとに 1 回ずつ行われます。エンジンは、1 つのストリームに対して実行可能なセグメントを作成し、コンピューティングノードに送信します。そのストリームのセグメントが完了したら、エンジンは次のストリームのセグメントを生成します。これにより、エンジンは前のストリームで何が発生したかを分析し (操作がディスクベースであったかどうかなど)、次のストリーム内におけるセグメントの生成に影響を与えることができます。

コンピューティングノードは、完了すると最終処理を行うためクエリの結果をリーダーノードに返します。リーダーノードは、データを 1 つの結果セットにマージし、必要なソートまたは集計すべてに対処します。次に、リーダーノードは結果をクライアントに返します。

クエリプランと実行ワークフロー - Amazon Redshift