原文英文,约1300词,阅读约需5分钟。
📝
内容提要
Postgres表的数据默认采用“堆”方法存储,数据分为1GB的文件和8KB的页面。更新时生成新版本,旧版本保留以便回滚。清理旧版本的过程称为“真空”,可自动运行。使用“VACUUM FULL”可释放文件系统空间,但需独占锁。调整自动真空参数可提高效率,避免数据库膨胀。
🎯
关键要点
-
Postgres表的数据默认采用“堆”方法存储,数据分为1GB的文件和8KB的页面。
-
更新时生成新版本,旧版本保留以便回滚,清理旧版本的过程称为“真空”。
-
真空过程会查找已完成事务更新或删除的行版本,并释放页面上的空间。
-
使用“VACUUM FULL”可以释放文件系统空间,但需要独占锁,建议在数据库访问量少时执行。
-
调整自动真空参数可以提高效率,避免数据库膨胀,特别是对于大表。
-
长时间运行的事务和锁可能导致自动真空失败,从而引起数据库膨胀。
-
可以通过增加自动真空工作内存和工人数量来优化真空过程。
❓
延伸问答
Postgres中的数据是如何存储的?
Postgres中的数据默认采用“堆”方法存储,数据分为1GB的文件和8KB的页面。
什么是真空过程,它的作用是什么?
真空过程是清理旧版本数据的异步过程,释放页面上的空间并更新表的自由空间映射。
如何使用VACUUM FULL释放文件系统空间?
使用VACUUM FULL可以释放文件系统空间,但需要独占锁,建议在数据库访问量少时执行。
自动真空参数如何调整以提高效率?
可以通过增加自动真空工作内存和工人数量,或调整阈值和比例因子来优化自动真空过程。
长时间运行的事务会对自动真空产生什么影响?
长时间运行的事务可能导致自动真空失败,从而引起数据库膨胀,因为旧版本的数据无法被标记为死数据。
如何检查数据库的膨胀情况?
可以通过Supabase CLI运行相关命令,查看死行和活行的数量,判断数据库是否膨胀。
🏷️