Redshift 数据之间的差异 api DescribeStatement 状态和控制台状态

Discrepancy between Redshift data api DescribeStatement status and console status

我正在将数据加载到 redshift 中,成功时通常需要大约一个小时,但有时似乎会随机超时。我继续从 DescribeStatement 调用查询中获得“已启动”状态,但当我查看控制台时,它显示查询已中止并通过“Undoing 1 transactions on table ...”语句回滚。但是我没有在 STL_LOAD_ERRORS 中发现任何与查询相关的错误,也没有在 STL_UTILITYTEXT 中发现任何对该交易有用的信息;尽管 STL_UNDONE 视图确实显示了回滚。

我原以为 DescribeStatement 会在发生这种情况时更新为“失败”或“中止”状态,但事实似乎并非如此。知道是什么导致加载失败而没有任何错误吗?有没有办法通过红移数据api来catch/handle?我目前正在考虑在指定时间后检查 STL_UNDONE,但希望有更好的解决方案。

语句超时似乎是一个可能的原因。您所描述的听起来像是从执行语句下关闭的连接。这个超时可能来自很多地方,但一个常见的地方是在集群配置和 WLM 配置中。

另一种可能是网络超时。数据库连接在整个会话期间保持打开状态,但当语句正在运行时,连接上没有 activity。一些网络设备看到这一点并假设出现问题并关闭连接,从而关闭会话,从而中止正在运行的事务。

如果您的问题是由连接关闭引起的,您可以在 stl_sessions 中进行调整。那里有关于超时的信息,但你也可以看到当查询命令中止时会话关闭的时间是否正确。

只有一个方面可能会导致您的问题,但比人们想象的更常见。

因此,在升级到 AWS 支持后,确认他们这一端存在错误。与数据相关 API 自动缩放协议有时会在不等待未完成的任务完成的情况下缩减。在他们实施长期解决方案时,有一个临时修复程序可以避免这种情况发生。有望在本月底,即 2022 年 6 月推出。