1.PG后台进程,用于自动清理块中的垃圾
可以设置开启或关闭,默认是开启,生产环境建议开启。
2.什么时候在表上做autovacuum?
autovacuum实际做两件事:
(1)空间整理-vacuum
(2)分析-analyze
触发autovacuum条件:
3.autovacuum的问题
表1:共100行,其触发分析和vacuum的阈值分别是:60.70.
表2:共100万行其触发分析和vacuum的阈值分别是:100000和200000
两张表触发autovacuum的条件相差过大
autovacuum setting的设置:
下面是全局配置:
4.autovacuum_max_workers(一次可以运行多少个autovacuum进程)--默认是3
5.autovacuum_naptime=1min(启动下一个autovacuum之前二点等待时间)--(autovacuum_naptime/N) 其中N是实例中数据块的总数
6.数据库发生震荡的原因与autovacuum的关系:
1.autovacuum可以看作是一种清洁工作
2.是一个IO密集型操作
简单来说就是autovacuum默认每一分钟进行一次,IO非常密集,导致数据库性能变差,清理完毕之后,数据库性能又变好了,所以叫做数据库震荡。
解决:设置了一些参数来最小化真空对IO的影响:
实例:
1.创建实验用例:直接向表中快速插入100000条数据库
2.分析导致analyze的阈值:10050
3.更新数据,达到触发analyze的阈值:
4.查看分析情况
更新了10048触发了自动分析。
但没有触发autovacuum。
5.再更新一万条数据
6.再次分析情况
此时更新了20048行,
此时仍没有达到阈值,没有做autovacuum。
7.再次更新
8.查看分析情况
可以看到触发了autovacuum,垃圾数据被自动清理了。
也可以看到n_dead_tup清0了。