跳至内容

为什么我的 Amazon Redshift Serverless 查询被取消或停止?

2 分钟阅读
0

我想知道为什么 Amazon Redshift Serverless 已取消或停止我的查询,但我收到了一条错误消息。

简短描述

以下是在 Amazon Redshift 中取消或停止查询的原因:

  • 您已达到查询配额。
  • 您已达到 Redshift 处理器 (RPU) 的工作组使用配额。
  • 您的查询已超出 statement_timeout 值。
  • 另一位用户已停止或取消查询。
  • 网络连接存在问题。

解决方法

查看 Amazon Redshift Serverless 工作组查询配额

当您达到工作组查询配额时,查询会返回以下错误消息:

“错误: 已根据用户的请求取消查询 (6800381)。”

要确认 Amazon Redshift 是否因为您达到配额而取消了查询,请在 Amazon Redshift 查询编辑器中运行以下 SQL 语句:

SELECT query_id, query_text, error_message from SYS_QUERY_HISTORY WHERE error_message ILIKE '%cancelled on user%';

要解决此问题,请增加您的工作组查询配额

查看 RPU 的 Amazon Redshift Serverless 工作组使用配额

当您达到 RPU 的工作组使用配额时,查询会返回以下错误消息:

“错误: 查询已达到使用限制。”

要确认 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 会取消您在会话期间提交的查询。该查询返回以下错误消息:

“错误: 已根据用户的请求取消查询 (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 中被取消?

AWS 官方已更新 1 年前