从我所读到的关于 VACUUM FULL 的所有内容中,我希望它会锁定我正在运行它的数据库,但它会使集群中的每个数据库都无法访问。我们的配置可能有什么问题吗?我确实启用了 autovacuum,但我们有一些笨拙的数据库我想彻底清理。这是 PostgreSQL v10。感谢您的任何见解。
从我所读到的关于 VACUUM FULL 的所有内容中,我希望它会锁定我正在运行它的数据库,但它会使集群中的每个数据库都无法访问。我们的配置可能有什么问题吗?我确实启用了 autovacuum,但我们有一些笨拙的数据库我想彻底清理。这是 PostgreSQL v10。感谢您的任何见解。
我正在考虑以下是 PostgreSQL v10 文档的原因:( https://www.postgresql.org/docs/10/sql-vacuum.html )
不建议将 FULL 选项用于日常使用,但在特殊情况下可能很有用。例如,当您删除或更新了表中的大部分行并希望表在物理上缩小以占用更少的磁盘空间并允许更快的表扫描时。VACUUM FULL 通常比普通的 VACUUM 更能缩小表格。
VACUUM 会导致 I/O 流量大幅增加,这可能会导致其他活动会话的性能下降。因此,有时建议使用基于成本的真空延迟功能。有关详细信息,请参阅第 19.4.4 节。
https://www.postgresql.org/docs/10/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-VACUUM-COST
在您的情况下,它可能已经发生,因为集群中的所有数据库共享公共资源,如果它在同一台服务器上。
一些表在集群的所有数据库之间共享:
pg_database
、、pg_tablespace
和pg_authid
(pg_shdepend
这些是我熟记的;我说的是表空间中的pg_global
表)。运行
VACUUM (FULL)
也会处理这些表,所以其他数据库都会受到影响。