Amazon Redshift Serverless により、クエリがキャンセルまたは停止された理由を把握したいです。エラーメッセージが表示されています。
簡単な説明
次の要因で、Amazon Redshift でクエリがキャンセルされたり停止したりします。
- クエリクォータに達した。
- Redshift 処理ユニット (RPU) のワークグループ使用量クォータに達した。
- クエリが statement_timeout 値を超過した。
- 別のユーザーがクエリを停止またはキャンセルした。
- ネットワーク接続に問題がある。
解決策
Amazon Redshift Serverless ワークグループのクエリクォータを確認する
ワークグループのクエリクォータに達すると、クエリは次のエラーメッセージを返します。
ERROR: Query (6800381) cancelled on user's request. (ユーザーのリクエストによりクエリ (6800381) がキャンセルされました)
クォータに達したことが原因で Amazon Redshift がクエリをキャンセルしたことを確認するには、Amazon Redshift クエリエディタから次の SQL ステートメントを実行します。
SELECT query_id, query_text, error_message from SYS_QUERY_HISTORY WHERE error_message ILIKE '%cancelled on user%';
この問題を解決するには、ワークグループのクエリクォータを増やします。
Amazon Redshift Serverless ワークグループの RPU 使用量クォータを確認する
RPU のワークグループ使用量クォータに達すると、クエリは次のエラーメッセージを返します。
Error: Query reached usage limit. (クエリが使用量制限に達しました)
使用量クォータに達したことが原因で Amazon Redshift がクエリをキャンセルしたことを確認するには、Amazon Redshift クエリエディタから次の SQL ステートメントを実行します。
SELECT query_id, query_text, usage_limit, error_message FROM SYS_QUERY_HISTORY WHERE error_message ILIKE '%reached usage limit%';
この問題を解決するには、ワークグループの使用量クォータを増やします。
クエリが statement_timeout 値を超えているかどうかを確認する
クエリが statement_timeout 値を超えると、Amazon Redshift はセッション中に送信したクエリをキャンセルします。クエリは次のエラーメッセージを返します。
ERROR: Query (150) cancelled on user's request. (ユーザーのリクエストによりクエリ (150) がキャンセルされました)
クラスターのステートメントのタイムアウトを確認するには、Amazon Redshift クエリエディタから次の SQL ステートメントを実行します。
SHOW statement_timeout;
このステートメントは、クラスターレベルのステートメントのタイムアウトをミリ秒単位で示します。出力を変更するには、ワークロード管理設定でパラメータを変更します。
ステートメントのタイムアウトが原因で Amazon Redshift がクエリをキャンセルしたことを確認するには、Amazon Redshift クエリエディタから次の SQL ステートメントを実行します。
SELECT * FROM SYS_QUERY_HISTORY WHERE query_text ILIKE '%set%statement_timeout%to%';
Amazon Redshift によりクエリがキャンセルされていた場合は、次のコマンドを実行して statement_timeout 値を増やします。
SET statement_timeout = (value)
注: (value) を従来の statement_timeout 値よりも大きい値に置き換えます。
他のユーザーによりクエリが停止またはキャンセルされたかどうかを確認する
他のユーザーによりクエリが停止またはキャンセルされたどうかを確認するには、次のコマンドを実行して error_message 列を確認します。
SELECT * FROM sys_query_history WHERE session_id = process_id;
注: process_id は、実際のプロセス ID に置き換えます。
停止したクエリを確認するには、Amazon Redshift クエリエディタから次の SQL ステートメントを実行します。
SELECT * FROM sys_query_history WHERE error_message ILIKE '%terminate%';
キャンセルされたクエリを確認するには、Amazon Redshift クエリエディタから次の SQL ステートメントを実行します。
SELECT * FROM sys_query_history WHERE error_message ILIKE '%canceled by user%';
クエリが出力に表示された場合は、クエリはユーザーによって停止またはキャンセルされたことを示します。
注: ユーザーは自分のセッションのみを停止できます。スーパーユーザーはすべてのセッションを停止できます。
ネットワークに関する問題
ネットワークの問題によってクエリがキャンセルされる場合もあります。
ネットワーク接続に問題があるかどうかを確認するには、次のコマンドを実行して SYS_CONNECTION_LOG のモニタリングビューを確認します。
SELECT * FROM SYS_CONNECTION_LOG WHERE session_id = process_id;
注: process_id は、実際のプロセス ID に置き換えます。
関連情報
Amazon Redshift でクエリがキャンセルされた理由を知りたいです