更新查询 Postgresql 更新缓慢

Posted

技术标签:

【中文标题】更新查询 Postgresql 更新缓慢【英文标题】:Slow update on update query Postgresql 【发布时间】:2018-08-23 14:55:38 【问题描述】:

我对包含 3600 万行的表运行更新查询。 此请求需要 45 分钟才能运行。已处理的字段已编入索引,并且数据库位于 ssd 上。

UPDATE batch_item SET processed=true

你知道为什么这么长吗?

【问题讨论】:

这会更新表中的所有行 - 这需要一些时间。然而,更新 3600 万行应该不会花费 那么 的时间。我的猜测是在那段时间它正在等待一些行锁,因为其他事务也在更新一些行 我有这种同时运行的查询:SHOW TRANSACTION ISOLATION LEVEL 顺便说一句:如果您不在查询中添加分号,则可能需要很长时间(假设是 psql 前端) @joop 我使用 datagrip 并且不需要分号来启动请求:-) 【参考方案1】:

我不知道您的索引有多重要以及它的 100% 可用性是否至关重要,但删除索引、设置值并在最后重新添加索引可能会节省您的时间。

这里有一些关于批量更新操作的有用信息:https://www.codacy.com/blog/how-to-update-large-tables-in-postgresql/

【讨论】:

以上是关于更新查询 Postgresql 更新缓慢的主要内容,如果未能解决你的问题,请参考以下文章

postgresql,查询运行缓慢

postgresql函数-获取受更新查询影响的行数[重复]

PostgreSQL - 使用子查询更新多个列值

postgresql:jsonb在一个查询中更新多个键

带有子查询的Postgresql更新[重复]

针对多个表优化缓慢的 postgresql 查询