クエリに時間がかかりすぎる - Amazon Redshift

クエリに時間がかかりすぎる

次の理由で、クエリに時間がかかりすぎる場合があります。以下のトラブルシューティングアプローチをお勧めします。

テーブルが最適化されていない

並列処理を最大限に活用できるようにテーブルのソートキー、分散スタイル、および圧縮エンコードを設定します。詳細については、自動テーブル最適化を参照してください。

クエリがディスクに書き込みを行っている

クエリが少なくともクエリ実行の一部でディスクに書き込みを行っている可能性があります。詳細については、「クエリパフォーマンスの向上」を参照してください。

クエリが他のクエリの終了を待つ必要がある

クエリキューを作成し、別の種類のクエリを適切なキューに割り当てることで、システムの全体的なパフォーマンスを改善できる可能性があります。詳細については、「ワークロード管理」を参照してください。

クエリが最適化されていない

説明プランを分析して、クエリを書き換えることが可能かどうか、またはデータベースを最適化することが可能かどうかを調べます。詳細については、「クエリプランの作成と解釈」を参照してください。

クエリの実行により多くのメモリが必要である

特定のクエリにより多くのメモリが必要な場合は、wlm_query_slot_countを増やすことによって使用可能なメモリを増やすことができます。

データベースに対して VACUUM コマンドを実行する必要がある

大量の行数を追加、削除、変更した場合、データをソートキー順序でロードしていなければ、VACUUM コマンドを実行します。VACUUM コマンドを実行すると、データが再編成され、ソート順序が維持され、パフォーマンスが復旧されます。詳細については、「テーブルのバキューム処理」を参照してください。

実行時間の長いクエリのトラブルシューティングに役立つその他のリソース

以下は、クエリのチューニングに役立つシステムビューのトピックとその他のドキュメントセクションです。

  • STV_INFLIGHT システムビューには、クラスターで実行されているクエリが表示されます。STV_RECENTS と一緒に使用すると、現在実行中のクエリや最近完了したクエリを判別できます。

  • SYS_QUERY_HISTORY はトラブルシューティングに役立ちます。DDL クエリと DML クエリが、関連するプロパティと共に表示されます。例えば、running や failed などの現在のステータス、それぞれの実行にかかった時間、同時実行スケーリングクラスターに対してクエリが実行されたかどうかなどを確認できます。

  • STL_QUERYTEXT は、SQL コマンドのクエリテキストを取得します。さらに、STL_QUERYTEXT を STV_INFLIGHT に結合する SVV_QUERY_INFLIGHT には、より多くのクエリメタデータが表示されます。

  • トランザクションロックの競合は、クエリパフォーマンスの問題を引き起こす可能性があります。現在テーブルをロックしているトランザクションについては、「SVV_TRANSACTIONS」を参照してください。

  • 優先して調整が必要なクエリの特定」には、最近実行したどのクエリが最も時間がかかったかを判断するのに役立つトラブルシューティングクエリが紹介されています。これにより、改善が必要なクエリに集中して取り組むことができます。

  • クエリ管理の詳細を参照し、クエリキューの管理方法を理解したい場合は、「ワークロード管理」にその方法が記載されています。ワークロード管理は高度な機能であるため、通常は自動ワークロード管理を利用することをお勧めします。