toa*_*ong 10 postgresql performance truncate centos
在postgres 9.2(CentOS)中,TRUNCATE TABLE命令偶尔需要很长时间才能运行.有一次,截断一个有100K记录的表需要1.5个多小时,在其他情况下甚至更长.当我使用pgAdmin截断表时也会发生此问题.可能的原因是什么?以及如何提高截断性能?
服务器上有16GB内存,shared_buffers = 1536MB
Cra*_*ger 16
TRUNCATE必须刷新shared_buffers被截断的表,并且必须取消链接旧文件,这在文件系统上可能很慢,如删除速度慢ext3.
1.5小时是非常极端的,因为我们通常最多只谈几秒钟.很可能你有其他会话持有表上的锁,阻止TRUNCATE进行.见pg_catalog.pg_locks和pg_catalog.pg_stat_activity.
关于锁监控的PostgreSQL wiki文章应该是有用的.
另请参见:Postgresql截断速度
小智 13
检查是否truncate被任何查询阻止
SELECT
activity.pid,
activity.usename,
activity.query,
blocking.pid AS blocking_id,
blocking.query AS blocking_query
FROM pg_stat_activity AS activity
JOIN pg_stat_activity AS blocking ON blocking.pid = ANY(pg_blocking_pids(activity.pid));
Run Code Online (Sandbox Code Playgroud)
如有必要终止它
SELECT pg_terminate_backend(PID);
| 归档时间: |
|
| 查看次数: |
8867 次 |
| 最近记录: |