5

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

update tablename set foo = true where id = 234;

其中“id”设置为(主)键,如果我运行“解释分析”,我得到:

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

但是,我仍然在慢日志(pgfouine)中有很多无法解释的查询,这花费了 200 多秒(?!):

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

谁能解释一下,这是什么原因?(表中 1.5 mio 行,postgresql 8.4)

4

2 回答 2

2

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

于 2010-05-24T19:47:43.240 回答
1

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

另一种可能是由于 I/O 操作而导致它很慢。检查这个线程关于 Postgres 中的 UPDATE 性能

于 2011-07-27T12:44:10.090 回答