【发布时间】:2014-09-09 18:25:15
【问题描述】:
我在 Redshift 集群中有一个大约 10 亿行的表。我有一份工作试图根据一些过滤器更新一些列值。更新此表中的任何内容都非常缓慢。这是一个例子:
SELECT col1, col2, col3
FROM SOMETABLE
WHERE col1 = 'a value of col1'
AND col2 = 12;
上面的查询在不到一秒的时间内返回,因为我在col1 和col2 上有排序键。只有一行满足此条件,因此结果集只有一行。但是,如果我运行:
UPDATE SOMETABLE
SET col3 = 20
WHERE col1 = 'a value of col1'
AND col2 = 12;
这个查询花费了未知的时间(我在 20 分钟后停止了它)。同样,它应该更新一行的一列值。
我也尝试关注此处的文档:http://docs.aws.amazon.com/redshift/latest/dg/merge-specify-a-column-list.html,其中谈到了创建临时登台表来更新主表,但得到了相同的结果。
知道这里发生了什么吗?
【问题讨论】:
-
查看该行是否有未结交易。尝试运行 SELECT * FROM pg_stat_activity;看看你的更新是否正在等待。
-
@Bob - 刚刚检查过,看起来没有任何东西在等待。
-
您应该为您的表和索引定义提供您打开的 postgres 版本以及您运行的任何命令的任何输出。你桌上有触发器吗?
-
还为您的选择添加一个解释计划,您的更新更多信息对于这些类型的事情是一件好事。
-
我对redshift一无所知,我快速浏览了文档,看起来它是postgres 8.x,与postgres有偏差,比如不受支持的命令等。我不知道知道你是否试过这个。也许更新正在将数据从一个节点移动到另一个节点,而这无法正常工作。那么,您可以将数据插入某个表中,然后删除旧数据吗?十亿行是很多行。当当。
标签: sql-update amazon-redshift