翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 Query Editor 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 によるクエリの実行方法に関する情報を提供するほか、クエリ内の潜在的なボトルネックを特定するのに役立ちます。 -
デバッグ –
STL_EXPLAINは、Amazon Redshift がそのクエリを実行するために行うステップを示すことで、クエリの問題を診断できます。 -
Amazon Redshift の動作に対する理解 –
STL_EXPLAINでは、Amazon Redshift がクエリを処理する方法に関するインサイトを提供できます。これにより、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 バイトであると予期されます。