1. 什么是vacuum
1.1. 什么是vacuum
在 PostgreSQL 数据库中,VACUUM 是一种用于管理和维护表的操作。它主要用于两个目的:
1.1.1. 释放未使用的空间
当在表中进行删除、更新或移动行时,PostgreSQL 并不会立即释放磁盘上占用的空间。相反,被标记为“删除”或“更新”的行会留在磁盘上,占据着空间。这会导致表文件增大,但实际上并没有增加有效的数据量。VACUUM 的作用是清理这些已被标记为删除的行,释放出这些未使用的空间。
1.1.2. 维护数据库的可见性与性能
PostgreSQL 使用多版本并发控制(MVCC)来处理事务。这意味着旧的行版本可能仍然对数据库的一致性是可见的。VACUUM 会清理已删除的行版本,确保数据库中只包含有效的数据,并且更新统计信息以供查询优化器使用。这有助于保持查询性能并防止数据混淆。
PostgreSQL 提供了自动执行 VACUUM 的功能,称为 autovacuum。这是一个后台进程,根据系统中的活动和表的更新情况自动触发 VACUUM 操作。这有助于保持数据库性能,并防止未使用空间堆积过多。
VACUUM 是 PostgreSQL 中维护数据库健康和性能的关键操作。定期执行 VACUUM 可以避免表文件膨胀、提高查询性能,并确保数据库的一致性和可靠性。
1.2. 其他主流数据库如何解决
1.2.1. MySQL / MariaDB
1.2.2. Microsoft SQL Server
1.2.3. Oracle Database
1.2.4. SQLite
2. 在什么情况下会触发vacuum
2. 1. 手动触发
2.2. 自动触发(autovacuum)
2.3. 触发条件
2.4. 重要性
3. vacuum和开发语言的类比
3.1. VACUUM 与 JVM / GC 的类比
4. 如何查看和复现vacuum
4.1. 查看vacuum
4.1.1. 查询系统视图
4.1.1.1 pg_stat_progress_vacuum
注意事项:
4.2. 复现vacuum
4.2.1. 插入大量数据然后删除
4.2.2. 执行 UPDATE 操作
4.2.3. 手动执行 VACUUM
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。