PostgreSQL 扩展与性能调优
技术要求
要进行相关操作,你需要有一个至少配备两个 CPU 和 2GB 内存的 PostgreSQL 服务器,并且能够从 PGDG 仓库和 GitHub 上通过互联网下载 RPM 包。
安装和创建 pg_repack 以在线重建对象
在 PostgreSQL 中,没有单独的 UNDO 存储,UNDO 记录以多版本形式存储在同一个表中。这些 UNDO 记录或死元组可以通过自动清理或手动清理来清除,但除非空页面位于堆的末尾,否则操作系统可能无法回收空间。未调整好的清理设置可能会导致更严重的问题,比如由于数据膨胀,查询可能需要扫描 100 个页面而不是 10 个页面。在这种情况下,唯一的选择就是重建表。虽然可以使用 VACUUM FULL
来重建表,但它会对表加排他锁,不允许对表进行读写操作,这在生产数据库中通常是要避免的。因此,我们可以使用 pg_repack
扩展来在线重建数据库对象,如表格和索引。
pg_repack
(https://github.com/reorg/pg_repack)是一个开源扩展,它可以帮助管理员或开发人员执行以下操作:
- 在线重建表(在线 VACUUM FULL
)
- 在线重建表的索引
- 在线将表或索引迁移到另一个表空间
- 在线对表进行聚类(按聚类索引排序)
准备工作
要使用 pg_repack
在线重建表,表必须在非空列上有主键或唯一总索引(但不能是函数