我有一个在 PostgreSQL 8.3 上运行的中型数据库集群。
数据库将数字文件(图像)存储为 LOB。
数据库集群中有相当多的活动,大量内容以持续的方式创建和删除。
即使承载 OID 的应用程序表由应用程序正确维护(当删除图像文件时),数据库集群的大小也会持续增长。
自动吸尘处于活动状态,因此不应发生这种情况。
我有一个在 PostgreSQL 8.3 上运行的中型数据库集群。
数据库将数字文件(图像)存储为 LOB。
数据库集群中有相当多的活动,大量内容以持续的方式创建和删除。
即使承载 OID 的应用程序表由应用程序正确维护(当删除图像文件时),数据库集群的大小也会持续增长。
自动吸尘处于活动状态,因此不应发生这种情况。
删除应用程序表(包含 OID)的行时,不会从数据库中删除 LOB。
这也意味着 VACUUM 进程不会回收空间。
为了摆脱未使用的 LOB,您已在数据库上运行 VACUUMLO。Vacuumlo 将从数据库中删除所有未引用的 LOB。
示例调用:
vacuumlo -U postgres -W -v <database_name>
(我只包含了 -v 以使 vacuumlo 更详细一些,以便您查看它删除了多少 LOB)
在vacuumlo 删除LOB 后,您可以运行VACUUM FULL(或让auto-vacuum 进程运行)。