クエリプランステップの確認 - Amazon Redshift

クエリプランステップの確認

EXPLAIN コマンドを実行して、クエリプランのステップを確認できます。次の例では、SQL クエリとその出力について説明します。クエリプランを最初から読むと、クエリを実行するのに必要な各論理操作について理解できます。詳細については、「クエリプラン」を参照してください。

explain select eventname, sum(pricepaid) from sales, event where sales.eventid = event.eventid group by eventname order by 2 desc;
XN Merge (cost=1002815366604.92..1002815366606.36 rows=576 width=27) Merge Key: sum(sales.pricepaid) -> XN Network (cost=1002815366604.92..1002815366606.36 rows=576 width=27) Send to leader -> XN Sort (cost=1002815366604.92..1002815366606.36 rows=576 width=27) Sort Key: sum(sales.pricepaid) -> XN HashAggregate (cost=2815366577.07..2815366578.51 rows=576 width=27) -> XN Hash Join DS_BCAST_INNER (cost=109.98..2815365714.80 rows=172456 width=27) Hash Cond: ("outer".eventid = "inner".eventid) -> XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=14) -> XN Hash (cost=87.98..87.98 rows=8798 width=21) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=21)

クエリプランの生成の一環として、クエリオプティマイザーはプランをストリーム、セグメント、ステップに分割します。クエリオプティマイザーは、プランを分割して、データとクエリワークロードを計算ノードに分散する準備をします。ストリーム、セグメントおよびステップの詳細については、「クエリプランと実行ワークフロー」を参照してください。

次の図は、前述のクエリと関連するクエリプランを表しています。これは、クエリオペレーションが、Amazon Redshift が計算ノードスライスのコンパイル済みコードを生成するために使用するステップにどのようにマップされるかを表示します。各クエリプラン操作は、セグメント内の複数のステップにマッピングされます。場合によっては、ストリーム内の複数のセグメントにマッピングされます。

この図では、クエリオプティマイザーは次のようにクエリプランを実行します。

  1. Stream 0 では、クエリは、Segment 0テーブルをスキャンする順次スキャン操作で events を実行します。クエリは、結合内の内部テーブルのハッシュテーブルを作成するハッシュ操作を使用して Segment 1 に進みます。

  2. Stream 1 では、クエリは、Segment 2テーブルをスキャンする順次スキャン操作で sales を実行します。結合列が分散キーでもソートキーでもないテーブルを結合するために、ハッシュ結合を使用して Segment 2 を続行します。結果を集計するハッシュ集計を使用して、Segment 2を再度続行します。次に、クエリではハッシュ集計操作を使用して Segment 3 を実行し、未ソートのグループ化された集計関数および、ORDER BY 句およびその他ソート操作を評価するソート操作を実行します。

  3. Stream 2 では、クエリがSegment 4Segment 5 でネットワーク操作を実行し、今後の処理のために中間結果をリーダーノードに送信します。

クエリの最後のセグメントはデータを返します。戻り値一式が集約またはソートされている場合、計算ノードはそれぞれ中間結果をリーダーノードに送信します。その後、リーダーノードがデータをマージし、最終結果を要求元のクライアントに送り返すことができます。

EXPLAIN 演算子の詳細については、「EXPLAIN」を参照してください。