对于上下文,我正在RDS上的postgres DB中归档一些来自大型(65GB以上)表的数据。在此之后,将进行定期归档,以便将来表保持较小。
我知道删除通常不会释放操作系统的空间,因为需要在postgres中使用“VACUUM”进程。
阅读了下面的文章后,我不清楚自动真空过程(AWS RDS中默认为打开)是否会将回收的空间释放给操作系统(因此通常可供使用),或者只是在“vacuated”表中使空间可供重用。
https://aws.amazon.com/blogs/database/understanding-autovacuum-in-amazon-rds-for-postgresql-environments/
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.Autovacuum.html
Postgres文档清楚地说明了VACUUM FULL要慢得多,需要ACCESS EXCLUSIVE
表锁,并且需要磁盘空间来临时复制表(我们没有),因此,我怀疑自动真空过程将等同于postgres中的“非满”VACUUM操作,并且只会释放空间以供已真空的表使用。
https://www.postgresql.org/docs/current/sql-vacuum.html
有没有人能告诉我,如果我是正确的,或者自动真空实际上释放了一般用途的空间?
1条答案
按热度按时间06odsfpq1#
我只能回答PostgreSQL,但它可能适用,如果他们没有修改太多。
Autovacuum(自动运行
VACUUM
)通常不会将空闲磁盘空间返回给操作系统,构成表的文件不会缩小,但它们会变得“更空”,未来的INSERT
和UPDATE
可以使用这些空间。例外情况是 * 真空截断 *:如果表的最后一页已经变空,并且PostgreSQL可以在表上获得一个简短的
ACCESS EXCLUSIVE
锁,它将切断这些页,从而缩小文件。