psycopg2光标挂在已终止的Redshift查询上

时间:2016-02-19 21:19:37

标签: python postgresql psycopg2 amazon-redshift

我正在使用psycopg2(2.6.1)连接到亚马逊的Redshift。

我的查询应该持续大约1秒钟,但是每20次并发尝试中大约有1次它只是永久挂起(我在1小时后手动杀死它们)。为了解决这个问题,我在查询之前配置了statement_timeout设置,如下所示:

rcur.execute("SET statement_timeout TO 60000")
rcur.execute(query)

所以在1分钟后查询将放弃,我可以再试一次(第二次尝试按预期快速完成),但即使这样(我确认通过将超时设置为1毫秒并看到它提高了一个例外),有时Python代码挂起而不是引发异常(它永远不会在print之后直接到达rcur.execute(query))。我可以在Redshift AWS仪表板中看到查询已被终止" 59秒后,我的代码仍然挂起一个小时,而不是引发异常。

有没有人知道如何解决这个问题,或者有更好的方法来处理通常很短的查询,这些查询偶尔会花费很长时间而且只需要取消并重试?

1 个答案:

答案 0 :(得分:1)

我认为您需要为Redshift连接配置keepAlive设置。 按照此AWS文档中的步骤执行此操作,

http://docs.aws.amazon.com/redshift/latest/mgmt/connecting-firewall-guidance.html