スキップしてコンテンツを表示

設定した WLM タイムアウトを Amazon Redshift クエリが超過するのはなぜですか?

所要時間1分
0

Amazon Redshift クエリに対してワークロード管理 (WLM) タイムアウトを設定しましたが、この期間が経過した後もクエリが実行され続けます

簡単な説明

WLM タイムアウトがクエリに適用されるのは、クエリ実行中フェーズの間のみです。WLM によって期待したタイミングでクエリが終了されない場合、通常は、クエリが実行ステージ以外のステージで時間を費やしたことが原因です。例えば、クエリは解析や書き換えが行われるのを待ったり、ロックが解除されるのを待ったり、WLM キュー内の空きを待ったりすることがあります。あるいは、クエリがリターンステージに到達したり、別のキューにホップしたりする場合もあります。

解決策

STV_RECENTS がクエリされた場合、starttime はクエリがクラスターに入った時間であり、クエリの実行が開始された時間ではありません。クエリが STV_RECENTS でRunning 状態になると、そのクエリがシステム内で実行中であることを意味します。ただし、クエリは、STV_INFLIGHT ステータスになるまではコンピュートノードのリソースを使用しません。クエリプランの詳細については、「クエリプランと実行ワークフロー」を参照してください。

実行中のクエリのステータスを表示するには、次のように、STV_RECENTS の代わりに STV_INFLIGHT をクエリします。

select \* from STV\_INFLIGHT where query = your\_query\_id;

クエリステージの詳細を確認するには、次のクエリを実行します。

select \* from SVL\_QUERY\_REPORT where query = your\_query\_id ORDER BY segment, step, slice;

STV_EXEC_STATE テーブルを使用して、次のように、コンピュートノードでアクティブに実行されているクエリの現在の状態を確認できます。

select \* from STV\_EXEC\_STATE where query = your\_query\_id ORDER BY segment, step, slice;

クエリが WLM タイムアウトの期間より長く実行されているように見える一般的な理由を以下に示します。

クエリが「リターン」フェーズにある

「リターン」には 2 つのステップがあります。STV_EXEC_STATE をチェックして、クエリが次のリターンフェーズのいずれかに入っているかどうかを確認します。

  • コンピュートノードからリーダーノードへのリターン
  • リーダーノードからクライアントへのリターン

ロールバックが進行中である

データ操作言語 (DML) の操作でエラーが発生し、ロールバックが行われることがあります。この操作は既にロールバックのプロセスに入っているため、「停止済み」と表示されない場合があります。STV_EXEC_STATE をクエリしてロールバックを表示したり、STL_UNDONE で詳細を確認したりできます。

クエリの実行前にキューイングに時間がかかっている

次のように STV_WLM_QUERY_STATE をクエリして、キューイング時間を確認します。

select \* from STV\_WLM\_QUERY\_STATE where query = your\_query\_id;

クエリがロックの解除を待っている

クエリが STV_RECENTS には表示されるが、STV_WLM_QUERY_STATE には表示されない場合、そのクエリはロックが解除されるのを待っていて、キューに入っていない可能性があります。詳細については、「Amazon Redshift でロックを検出して解除する方法を教えてください」を参照してください。

クエリが別のキューに移動した

読み取りクエリが現在の WLM キューに対するタイムアウト制限に到達すると、そのクエリは次の WLM キューにプッシュされます。あるいは、ホップアクションを指定するクエリモニタリングルールが存在する場合も、クエリは次の WLM キューにプッシュされます。クエリが次のキューにホップしたかどうかを確認するには、シナリオに基づいて次のクエリを実行します。

  • クエリが現在実行中の場合は、STV_WLM_QUERY_STATE をクエリします。
  • クエリが完了している場合は、STL_WLM_QUERY をクエリします。

クエリが別のキューにホップすることを回避するには、WLM キューを設定するか、WLM クエリモニタリングルールを設定します。クエリホッピングの詳細については、「WLM クエリキューのホッピング」を参照してください。

ネットワークまたはファイアウォールの問題

Amazon Redshift サーバーでクライアントとの通信に問題が発生した場合、サーバーが「クライアントへのリターン」状態で停止する可能性があります。インバウンドのオンプレミスファイアウォール設定、アウトバウンドのセキュリティグループルール、アウトバウンドのネットワークアクセスコントロールリスト (ネットワーク ACL) ルールなど、ネットワークコンポーネントとの競合がないかを確認します。詳細については、「Amazon EC2 以外から接続するファイアウォールタイムアウトの問題」を参照してください。

クラスターの問題

ハードウェアの問題など、クラスター自体の問題によってクエリがフリーズすることがあります。クラスターの問題が原因でクエリがフリーズした場合、クラスターは「ハードウェア障害」ステータスになります。単一ノードクラスターを復旧するには、スナップショットを復元します。マルチノードクラスターでは、障害が発生したノードは自動的に置き換えられます。

関連情報

クエリパフォーマンスのチューニング

クエリの分析および改善

AWS公式更新しました 2年前
コメントはありません