翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Redshift のクエリプラン
クエリプランは、データに対してクエリを実行するために実行エンジンが従う必要がある指示のリストです。次のクエリ例に示すように、EXPLAIN コマンドを実行してから実際のクエリテキストを実行することで、クエリプランを作成できます。
EXPLAIN select s.s_name, sum(li.l_quantity) as quantity from tpch.lineitem li join tpch.orders o on o.o_orderkey = li.l_orderkey and o.o_orderdate > '1992-05-01' join tpch.supplier s on s.s_suppkey = li.l_suppkey group by s.s_name order by quantity desc limit 10;
上記のクエリ例に対して EXPLAIN
コマンドを実行すると、次の出力が得られます。
XN Limit (cost=1004400430902.15..1004400430902.17 rows=10 width=39) -> XN Merge (cost=1004400430902.15..1004400430926.97 rows=9928 width=39) Merge Key: sum(li.l_quantity) -> XN Network (cost=1004400430902.15..1004400430926.97 rows=9928 width=39) Send to leader -> XN Sort (cost=1004400430902.15..1004400430926.97 rows=9928 width=39) Sort Key: sum(li.l_quantity) -> XN HashAggregate (cost=4400430218.24..4400430243.06 rows=9928 width=39) -> XN Hash Join DS_BCAST_INNER (cost=21489.58..4400401726.35 rows=5698378 width=39) Hash Cond: ("outer".l_suppkey = "inner".s_suppkey) -> XN Hash Join DS_DIST_NONE (cost=21364.58..273387.85 rows=5698378 width=14) Hash Cond: ("outer".l_orderkey = "inner".o_orderkey) -> XN Seq Scan on lineitem li (cost=0.00..60012.15 rows=6001215 width=22) -> XN Hash (cost=17803.81..17803.81 rows=1424306 width=8) -> XN Seq Scan on orders o (cost=0.00..17803.81 rows=1424306 width=8) Filter: (o_orderdate > '1992-05-01'::date) -> XN Hash (cost=100.00..100.00 rows=10000 width=33) -> XN Seq Scan on supplier s (cost=0.00..100.00 rows=10000 width=33)
注記
クエリプラン出力の例は、クエリ実行の簡略化された高レベルビューです。計画例は、パラレルクエリ処理の詳細を示していません。詳細については、クエリを実行し、SVL_QUERY_SUMMARY または SVL_QUERY_REPORT ビューを使用してクエリの概要情報を取得します。
Amazon Redshift クエリエディタ v2
クエリエディタ v2 の Explain オプションを使用して、Amazon Redshift でクエリプランを表示することもできます。手順については、Amazon Redshift ドキュメントの「クエリエディタ v2 の使用」を参照してください。
クエリエディタ v2 によって生成されたクエリプランには、次の情報が含まれます。
-
実行エンジンが実行するオペレーションで、結果を下部から上部に読み取る
-
各オペレーションが実行するステップのタイプ
-
各オペレーションで使用されるテーブルと列
-
各オペレーションで処理されるデータの量。行数とバイト単位のデータ幅
-
オペレーションの相対コスト (コストは、プラン内のステップの相対実行時間を比較する測定です。 コストは、実際の実行時間やメモリ消費量に関する正確な情報も、実行プラン間の意味のある比較も提供しません。 ただし、コストは、クエリ内のどのオペレーションが最も多くのリソースを消費しているかを示します)。
EXPLAIN プラン
STL_EXPLAIN システムテーブルを使用して、実行のために送信されたクエリのEXPLAIN
計画を表示できます。全体として、 STL_EXPLAIN
を使用すると、Amazon Redshift クエリのパフォーマンス、効率、コスト効率を向上させることができます。
を使用する利点STL_EXPLAIN
は次のとおりです。
-
パフォーマンスの最適化 –
STL_EXPLAIN
は、パフォーマンスを向上させるために最適化できるクエリの領域を特定するのに役立ちます。 -
クエリ計画 –
STL_EXPLAIN
は、Amazon Redshift がクエリをどのように実行しているかに関する情報を提供し、クエリ内の潜在的なボトルネックを特定するのに役立ちます。 -
デバッグ – Amazon Redshift がそのクエリを実行するために実行するステップを示すことで、クエリに関する問題の診断
STL_EXPLAIN
に役立ちます。 -
Amazon Redshift の動作を理解する – Amazon Redshift がクエリを処理する方法に関するインサイトを提供
STL_EXPLAIN
できます。これにより、Amazon Redshift の動作の理解が向上します。 -
コストの最適化 – は、クエリの推定コストに関する情報を提供
STL_EXPLAIN
できます。これにより、コストを最適化できる領域を特定できます。
次のクエリは、特定のクエリのプランノードを返す例です。
select nodeid as id, plannode, info from stl_explain where query=1042904 order by nodeid;
前述のクエリは、次の出力を返します。

このEXPLAIN
プランは、コスト、行、幅に関するメトリクスなど、各オペレーションに役立つメトリクスを返します。例えば、前のクエリの 7 行目は以下を返します。
-> XN Hash Join DS_DIST_NONE (cost=21364.58..273387.85 rows=5698378 width=14)
コスト
コストは、プラン内のオペレーションを比較するのに役立つ相対値です。コストは、2 つの期間で区切られた 2 つの小数値で構成されます。この例では、コストは に等しくなります21364.58..273387.85
。以下の点を考慮してください。
-
最初の値 (この場合は
21364.58
) は、このオペレーションの最初の行を返す相対コストを提供します。 -
2 番目の値 (この場合は
273387.85
) は、オペレーションを完了するための相対コストを提供します。
クエリプランのコストは累積的であり、低い行から高い行にロールアップされます。上記の出力例では、行 7 には、他のオペレーションのコストがそれ自体の下の行 (つまり、行 8~12 以降) に含まれます。
[Rows] (行)
行は、返される行の推定数です。この例では、スキャンは 5,698,378 行を返すことが予想されます。行の見積もりは、 ANALYZE
コマンドによって生成された利用可能な統計に基づいています。ANALYZE
が最近実行されていない場合、見積もりの信頼性は低下します。
[幅]
幅は、平均行の推定幅をバイト単位で表したものです。この例では、平均行幅は 14 バイトと予想されます。