为什么postgresql更新查询有时会很慢,即使使用索引也是如此

时间:2010-05-24 19:38:33

标签: postgresql indexing execution performance

我有一个简单的更新查询(foo列类型是BOOLEAN(默认为false)):

update tablename set foo = true where id = 234;

将“id”设置为(主)键,如果我运行“explain analyze”,我得到:

Index Cond: (id = 234)
Total runtime: 0.358 ms

但是,我在慢速日志(pgfouine)上有大量无法解释的查询,这需要超过200秒(?!):

Times executed: 99, Av. duration (s): 70

任何人都可以解释一下,原因是什么? (表中有1.5 mio行,postgresql 8.4)

2 个答案:

答案 0 :(得分:2)

我的第一个猜测是你有一些其他查询锁定整个表或正在更新的行。您的简单更新是被迫等待其他操作完成的。

答案 1 :(得分:1)

检查您是否对更新的列没有任何索引或约束。如果是这样,那么数据库可能正在进行索引重新计算或约束评估。这些附加任务不包含在EXPLAIN ANALYZE结果中。

其他可能性是由于I / O操作而导致速度很慢。请检查此thread about UPDATE performance in Postgres