如何在PostgreSQL 9.5中找到在数据库上执行full vacuumdb时导致死锁错误/失败的原因,选项是——作业并行运行full vacuum。
我只是得到一些进程号和表名。。。如何防止这种情况,以便我可以成功地在数据库上并行进行全真空?
最佳答案
在负载下完成VACUUM FULL
是一项相当困难的任务。问题是Postgres正在压缩表占用的空间,因此任何数据操作都会干扰这一点。
要实现完全真空,您可以选择:
锁定对真空表的访问。不过,不确定获取某个独占锁是否有帮助。您可能需要阻止在应用程序级别访问表。
使用create new table - swap (rename tables) - move data - drop original
技术。这样就不会压缩原始表下的空间,只需删除表即可释放空间。当然,您正在重建所有索引、重定向FKs等。
另一个问题是:是否需要VACUUM FULL
?它所做的唯一VACUUM ANALYZE
不做的事情是在文件系统上收缩表。如果你不是很有限的磁盘空间,你不需要做一个完整的真空那么多。
希望能有所帮助。
关于postgresql - PostgreSQL如何使用--jobs参数查找真空中导致死锁的原因,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39440460/