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 タイムアウト期間より長く実行される可能性がある一般的な理由を以下に示します。
クエリは「return」フェーズにあります
2 つの「return」ステップがあります。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 キューまたは WLM クエリ監視ルールを設定します。クエリのホッピングの詳細については、WLM クエリキューのホッピングを参照してください。
ネットワーキングまたはファイアウォールに問題がある
Amazon Redshift サーバーでクライアントとの通信に問題がある場合、サーバーが「return to client」(クライアントに戻る) 状態でスタックすることがあります。インバウンドオンプレミスのファイアウォール設定、アウトバウンドセキュリティグループルール、アウトバウンドネットワークアクセスコントロールリスト (ネットワーク ACL) ルールなど、ネットワーキングコンポーネントとの競合を確認します。詳細については、Amazon EC2 の外部からの接続 - ファイアウォールタイムアウトの問題を参照してください。
クラスターに問題がある
ハードウェアの問題など、クラスター自体に問題があると、クエリがフリーズすることがあります。この場合、クラスターは「ハードウェア障害」ステータスになります。単一ノードクラスターを復旧するには、スナップショットを復元します。マルチノードクラスターでは、障害が発生したノードは自動的に置き換えられます。
関連情報
クエリパフォーマンスのチューニング
クエリの分析と改善