在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_locks
和pg_catalog.pg_stat_activity
。
The PostgreSQL wiki article on lock monitoring应该有用。
另请参阅:Postgresql Truncation speed
关于performance - postgres截断很慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19936204/