在postgres 9.2(CentOS)中,TRUNCATE TABLE命令偶尔需要花费很长时间才能运行。有一次,截断具有100K条记录的表花了1.5个小时以上,在其他情况下甚至更长。当我使用pgAdmin截断表时,也会发生此问题。可能的原因是什么?以及如何提高截断性能?

服务器上有16GB的内存,shared_buffers = 1536MB

最佳答案

TRUNCATE必须刷新被截断的表的shared_buffers,并且必须取消链接旧文件,这对于删除速度较慢的文件系统(例如ext3)来说可能会很慢。

但是1.5小时是非常极端的,因为我们通常最多只说几秒钟。您很可能还有其他 session 在表上持有锁定,从而阻止TRUNCATE继续进行。参见pg_catalog.pg_lockspg_catalog.pg_stat_activity

The PostgreSQL wiki article on lock monitoring应该有用。

另请参阅:Postgresql Truncation speed

关于performance - postgres截断很慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19936204/

10-15 19:43