Postgresql具有真空功能,可以回忆死元组占用的空间。自动真空默认打开,并根据配置设置运行。
当我检查pg_stat_all_tables的输出,即last_vacuum和last_autovacuum时,数据库中有足够数量的死元组(大于1K)的大多数表从未运行自动真空。当这些表很少被使用时,我们也会得到2-3个小时的时间窗口。
下面是我的数据库的自动真空设置

下面是pg_stat_all_tables的输出

我想问这是一个好主意,只依靠汽车真空?自动真空是否需要特殊设置才能正常工作?
我们应该设置一个手动吸尘器吗?我们应该同时使用两者,还是直接关闭自动真空,只使用手动真空?
发布于 2018-01-29 11:07:11
你绝对应该用自动吸尘器。
目前是否有正在运行的自动真空进程?
这样的表上的手动VACUUM成功吗?
设置log_autovacuum_min_duration = 0以获取日志中有关自动真空处理的信息。
如果系统活动太高,自动真空可能无法跟上。在这种情况下,建议将自动真空配置为更具侵略性,例如设置autovacuum_vacuum_cost_limit = 1000。
发布于 2018-01-29 11:08:56
https://www.postgresql.org/docs/current/static/routine-vacuuming.html
PostgreSQL数据库需要定期维护,称为清空。对于许多安装来说,允许由自动真空守护进程执行真空操作就足够了,这一点在24.1.6节中已经描述过了。您可能需要调整此处描述的自动清空参数,以便为您的情况获得最佳结果。一些数据库管理员希望用手动管理的真空命令来补充或替换守护进程的活动,这些命令通常是按照cron或Task Scheduler脚本的计划执行的。
真空创造了重要的IO,如https://www.postgresql.org/docs/current/static/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-VACUUM-COST,以满足您的需要。
此外,您还可以设置每个表的自动真空设置,以便更多地“自定义”https://www.postgresql.org/docs/current/static/sql-createtable.html#SQL-CREATETABLE-STORAGE-PARAMETERS。
以上将给你的想法,为什么你的1K死元组可能是不够的自动真空,以及如何改变它。
手动VACUUM是一次运行的完美解决方案,而要运行系统,我肯定依赖于自动真空守护进程
https://stackoverflow.com/questions/48499263
复制相似问题