Postgresql具有真空的功能,可以重新收集死元组所占用的空间。自动真空默认打开,并根据配置设置运行。
当我检查pg_stat_all_表的输出时,即last_vacuum和last_autovacuum,对于数据库中有足够数量的死元组(大于1K)的大多数表,autovacuum从未运行过。当这些表很少使用时,我们还得到一个2-3小时的时间窗口。
以下是我的数据库的自动真空设置
下面是pg_stat_all_表的输出
我想问一下,仅仅依靠自动吸尘器是个好主意吗?
自动真空是否需要特殊设置才能正常工作?
我们应该设置手动吸尘器吗?我们应该同时使用还是只关闭自动真空和手动真空?
最佳答案
https://www.postgresql.org/docs/current/static/routine-vacuuming.html
PostgreSQL数据库需要定期维护,称为清空。
对于许多装置来说,允许进行抽真空就足够了
由autovacuum守护进程执行,如第24.1.6节所述你
可能需要将此处描述的自动吸尘参数调整为
为你的情况取得最好的结果。一些数据库管理员
将要用
手动管理的真空命令,通常执行
根据cron调度或任务调度脚本。
真空产生显著的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
是一次性运行的完美解决方案,而要运行系统,我肯定要依赖autovacuum守护进程