Redshift+SQLAlchemy长查询挂起

2024-05-28 19:26:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一些事情:

conn_string = "postgresql+pg8000://%s:%s@%s:%d/%s" % (db_user, db_pass, host, port, schema)
conn = sqlalchemy.engine.create_engine(conn_string,execution_options={'autocommit':True},encoding='utf-8',isolation_level="AUTOCOMMIT") 
rows = cur.execute(sql_query)

在红移集群上运行查询。最近,我一直在做维护任务,比如对每天被截断和重新加载的大型表运行vacuum reindex。在

问题是,对于一个特定的表(这个表非常庞大,有6000万行跨15列),而当我使用上面的方法运行它时,它永远不会结束并挂起。我可以在AWS的仪表盘上看到vacuum命令的一部分运行了大约5分钟,然后就停止了。没有python错误,集群上没有错误,没有什么。在

我猜是在命令执行期间失去了连接。那么,我如何证明我的理论呢?还有其他人有这个问题吗?如何更改连接字符串以使其保持更长的生存时间?在

编辑:

在这里的评论之后,我改变了我的连接方式:

^{pr2}$

它已经工作了一段时间了。但是,它决定对更大的表使用相同的行为,其中vacuum reindex实际上需要大约45分钟(至少这是我的估计,该命令永远不会在Python中完成运行)。在

无论查询运行时是什么,我如何才能使其工作?在


Tags: 命令hostdbstringpostgresql错误集群pass
1条回答
网友
1楼 · 发布于 2024-05-28 19:26:57

这很可能不是连接断开的问题。要确认这一点,请尝试将几百万行放入一个虚拟表中(这需要5分钟以上),然后查看语句是否失败。一旦一个查询被提交到redshift,不管您关闭的连接字符串如何,查询都会在后台执行。在

现在,回到问题本身-我猜您的内存或磁盘空间不足,请您更详细地列出您的红移设置(有多少个dc1/ds2节点)?另外,尝试运行一些管理查询,看看磁盘上还有多少空间。有时当集群被加载到边缘时,会抛出磁盘已满错误,但在您的情况下,因为连接可能在错误被抛出到pythonshell之前就被断开了。在

相关问题 更多 >

    热门问题