【发布时间】:2015-04-10 17:32:39
【问题描述】:
我一直在尝试对包含 2 列(id 和 nb_send)的巨大表(大约 600 万行)进行大规模更新
我只需要增加一列 (nb_send)
这是查询:
UPDATE nb_send
SET n_nb_send = n_nb_send + 1
WHERE n_id = ( .., .., .. with the 100K ids, etc.. )
当我想更新 100K 行时,它需要很长时间(我从来没有等到最后,因为它超过了 40 分钟)而且我想在不到 2 分钟的时间内完成。
【问题讨论】:
-
您或许可以提供一些关于什么是花时间的提示?您是否使磁盘 I/O 饱和?你有外键日志吗?定位这 100K 行是否需要很长时间?只有您可以访问您的特定机器,除非您分享一些详细信息,否则没有人能说出非常有用的信息。
-
在较小的事务中进行更新吗? (尝试例如 1 - 10k 行/事务)
-
更新 10 万条记录需要 40 分钟?听起来有些记录被另一个进程锁定了。检查 pg_stat_activity 等待活动。
-
“它不工作”很少是对问题的有用描述。
标签: sql postgresql optimization