Performance PostgreSql在大表上的删除约束非常慢

Performance PostgreSql在大表上的删除约束非常慢,performance,constraints,postgresql-9.2,Performance,Constraints,Postgresql 9.2,我们有一个在Windows上运行的PostgreSql 9.2数据库表,其中大约有7.5亿行。我们删除了列上的FK约束,但该语句现在已经运行了48小时,仍然没有完成 服务器有32GB的RAM和16个CPU。不幸的是,在运行SQL语句之前,我们没有增加维护工作量。因此,它被设置为256MB。机器上的资源甚至没有接近最大值。事实上:CPU使用率低于3%,我们有80%的RAM可用,磁盘I/O不会超过5MB/s,即使机器很容易超过100MB/s 为什么删除FK约束需要这么长时间? 有没有办法在该语句运行

我们有一个在Windows上运行的PostgreSql 9.2数据库表,其中大约有7.5亿行。我们删除了列上的FK约束,但该语句现在已经运行了48小时,仍然没有完成

服务器有32GB的RAM和16个CPU。不幸的是,在运行SQL语句之前,我们没有增加维护工作量。因此,它被设置为256MB。机器上的资源甚至没有接近最大值。事实上:CPU使用率低于3%,我们有80%的RAM可用,磁盘I/O不会超过5MB/s,即使机器很容易超过100MB/s

为什么删除FK约束需要这么长时间? 有没有办法在该语句运行时提高其执行性能? 将FK约束添加到此大小的表中最有效的方法是什么?
最有可能的是,投手在等待锁定,而不是真正做什么。你检查过pg_锁和pg_统计活动了吗?谢谢你的建议。是的,自动吸尘是保持锁以防止缠绕。看来我们已经达到20万大关了。你真的应该考虑升级到更新的版本。自9.2发布以来,autovacuum已经有了很多改进。您通常也应该让autovacuum更积极地运行,这样您就不会达到需要大量反环绕真空的程度。