Amazon Redshift
クラスター管理ガイド (API バージョン 2012年12月1日)

クエリ実行の分析

[Query] ビューの [Query Execution Details] セクションには、クエリの処理方法の詳細が表示されます。このセクションでは、SVL_QUERY_REPORTSTL_EXPLAIN、および他のシステムビューやシステムテーブルからのデータが組み合わされます。

[クエリの実行の詳細] セクションには 3 つのタブがあります。

  • [Plan]。このタブには、表示されているクエリの説明プランが表示されます。

    [Plan] タブの情報は、データベースでの EXPLAIN コマンドの実行と似ています。EXPLAIN コマンドでは、クエリテキストを調べ、クエリプランを返します。この情報を使用してクエリを評価し、必要に応じて効率とパフォーマンスを高めるために変更します。EXPLAIN コマンドは実際にクエリを実行しません。

    次の例は、2008 年に販売されたチケット数と、そのクエリのクエリプランに基づき、サンディエゴで最も販売数の多かった販売会社 5 社を返します。

    explain select sellerid, username, (firstname ||' '|| lastname) as name, city, sum(qtysold) from sales, date, users where sales.sellerid = users.userid and sales.dateid = date.dateid and year = 2008 and city = 'San Diego' group by sellerid, username, name, city order by 5 desc limit 5;

    説明プランの詳細については、Amazon Redshift データベース開発者ガイドの「説明プランの分析」を参照してください。

    実際にクエリを実行する (EXPLAIN コマンドを省略) すると、エンジンはクエリパフォーマンスを最適化し、クエリの処理を変更する方法を発見できる可能性があります。クエリの実際のパフォーマンスデータは、SVL_QUERY_REPORTSVL_QUERY_SUMMARY などのシステムビューに保存されます。

    Amazon Redshift コンソールは、STL_EXPLAIN、SVL_QUERY_REPORT、およびその他のシステムビューやシステムテーブルを組み合わせて使用して実際のクエリパフォーマンスを表し、それをクエリの説明プランと比較します。この情報は [Actual] タブに表示されます。場合によっては、説明プランと実際のクエリ実行ステップが異なることがあります。そのような場合は、ANALYZE などのデータベースでオペレーションを実行して統計を更新し、説明プランをより効果的にします。

    さらに、クエリオプティマイザは場合によっては複雑な SQL クエリをパートに分割し、volt_tt_guid という命名規則で一時テーブルを作成して、クエリをより効率的に処理します。この場合、説明プランと実際のクエリ実行の要約の両方は、最後に実行されたステートメントに適用されます。前のクエリ ID を確認して、クエリに対応する各パートの説明プランと実際のクエリの要約を表示できます。

    説明プランとシステムビューおよびログとの違いの詳細については、Amazon Redshift データベース開発者ガイドの「クエリの概要の分析」を参照してください。

  • [Actual]。このタブには、実行されたクエリの実際のステップと統計が表示されます。この情報は、[タイムライン] および [実行時間] のテキストの階層と視覚的なグラフで表示されます。

    [タイムライン] ビューには、クエリの実際のステップが実行されたシーケンスが表示されます。

    [実行時間] ビューには、クエリの各ステップにかかった時間が表示されます。これを使用して、完了に時間がかかっているステップについて理解できます。

    ビューにはそれぞれ、[平均時間] と [最大時間] が表示されます。

    [Avg] 統計には、データスライス間のステップの平均値実行時間、およびその時間が表す合計クエリ実行時間の割合が表示されます。[Max] 統計は、任意のデータスライスのステップの最長実行時間とスキューを示します。スキューとは、ステップの平均実行時間と最大実行時間の差のことです。

    2 つの条件が両方とも一致する場合は、ステップを調査する必要があります。1 つの条件は、最大実行時間が、一貫してクエリの複数実行の平均実行時間の 2 倍以上であることです。もう 1 つの条件は、ステップに非常に長い時間がかかる (たとえば、大きなクエリの実行時間の上位 3 ステップのいずれかであるなど) ことです。

    注記

    可能であれば、クエリを 2 回実行して、典型的な実行の詳細を確認します。コンパイルを行うと、それ以降の実行には存在しないオーバーヘッドが、クエリの最初の実行に追加されます。

    次に示すように、グラフの任意の棒を選択して、説明プランから予測されるデータを、クエリの実際のパフォーマンスと比較することができます。

    クエリオプティマイザが STL_ALERT_EVENT_LOG システムテーブルでアラートを生成した場合、アラートに関連付けられた計画ノードにはアラートアイコンが付きます。

  • メトリクス. このタブには、実行されたクエリのメトリクスが表示されます。

    [返された行] メトリクスは、クエリの各ステップで生成された行の合計数です。

    [返されたバイト] メトリクスは、各クラスターノードに返されたバイト数を示します。

    [実行時間] メトリクスは、各クラスターノードのクエリの実行時間を示します。

    [行のスループット] メトリクスは、各クラスターノードで返された行数をクエリ実行時間で除算した数を表示します。

    クエリの実行に予想より時間がかかる場合は、[メトリクス] タブを使用して、原因をトラブルシューティングします。[行のスループット] メトリクスを参照してください。いずれかのクラスターノードの行のスループットが、他のノードよりもはるかに高く見える場合、そのワークロードはクラスターノード間で不均等に分散されます。原因のひとつとして、ノードスライス間でデータが不均等に分散されている、または歪んでいることが考えられます。詳細については、「データスキューまたは未ソート行のあるテーブルの特定」を参照してください。

    データが均等に分散されている場合は、クエリによって、主にそのノードに配置されている行がフィルタリングされている場合があります。この問題を修正するには、クエリ内のテーブルの分散スタイルを確認し、改善できる点がないかどうかを調べます。変更を加える前に、必ずこのクエリのパフォーマンスと他の重要なクエリやシステム全体のパフォーマンスを比較検討してください。詳細については、「データ分散スタイルの選択」を参照してください。

注記

メトリクスタブは、単一ノードクラスターでは使用できません。

コンソールを使用した [Query Execution Details] の表示

クエリ実行の詳細を表示するには、次の手順を使用します。

クエリ実行の詳細を表示するには

  1. AWS マネジメントコンソールにサインインし、Amazon Redshift コンソール(https://console.aws.amazon.com/redshift/)を開きます。

  2. ナビゲーションペインで [Clusters] を選択します。

  3. [クラスター] リストで、クエリ実行の詳細を表示するクラスターを選択します。

  4. [クエリ] タブを選択し、パフォーマンスデータを表示するクエリを開きます。

  5. [Query Execution Details] セクションを展開し、以下の操作を行います。

    1. [Plan] タブで、クエリの説明プランを確認します。場合によっては、[Actual] (実際) タブで、説明プランが実際のクエリ実行と異なることがあります。このような場合は、ANALYZE を実行して統計を更新するか、データベースでその他のメンテナンスを実行して、実行するクエリを最適化しなければならない可能性があります。クエリの最適化の詳細については、Amazon Redshift Database Developer Guide の「クエリパフォーマンスのチューニング」を参照してください。

    2. [Actual] タブで、クエリ実行の各計画ノードに関連付けられたパフォーマンスデータを確認します。階層の個別の計画ノードを選択すると、特定の計画ノードに関連付けられたパフォーマンスデータを表示できます。このデータには、予測データと実際のパフォーマンスデータの両方が含まれます。

    3. [メトリクス] タブで、各クラスターノードのメトリクスを確認します。