2

如何在 PostgreSQL 9.5 中找到导致死锁错误/失败的原因,当使用选项 --jobs 对数据库执行完全真空数据库以并行运行完全真空时。

我只是得到一些进程号和表名......如何防止这种情况,以便我可以成功地并行对数据库进行完全真空处理?

4

1 回答 1

1

完成VACUUM FULL负载不足是一项非常艰巨的任务。问题是 Postgres 正在收缩表占用的空间,因此任何数据操作都会干扰它。

要实现完全真空,您有以下选择:

  • 锁定对清理表的访问。不过,不确定获取一些排他锁是否会有所帮助。您可能需要阻止访问应用程序级别的表。
  • 使用一种create new table - swap (rename tables) - move data - drop original技术。这样您就不会收缩原始表下的空间,只需删除表即可释放它。当然,您正在重建所有索引、重定向 FK 等。

另一个问题是:你需要VACUUM FULL吗?它唯一没有VACUUM ANALYZE做的就是在文件系统上收缩表。如果您不受磁盘空间的限制,则不需要做那么多的完全真空。

希望有帮助。

于 2016-09-12T12:02:04.440 回答