PG-Vacuum

1. vacuum机制

    在PG中,通过数据的多版本来实现MVCC。当变更数据,重建索引等操作时,PG内部是通过将旧版本数据标记为无效,新数据写入日志文件,成功后把新数据写入磁盘。该过程不会立刻释放占用的空间,这将会引起数据膨胀。因此,在PG中引入vacuum机制来清理旧数据和旧的事务。VACUUM会消耗I/O资源,可能引起其它活动会话性能变差。


2. VACUUM类型

1)Full VACUUM: 排他锁表,并对表进行完全清理;

2) Lazy VACUUM: 标记无效数据空间为。


3. VACUUM参数

1) autovacuum=on 默认打开自动垃圾回收
2) log_autovacuum_min_duration 默认-1,设置为0会记录所有vacuum行为,大于0的话,记录运行超过这个时间的vacuum,单位毫秒
3) autovacuum_max_workers vacuum同时运行的进程数量默认3
4) autovacuum_naptime vacuum每次运行的时间间隔,默认为1分钟
5) autovacuum_vacuum_threshold autovacuum_vacuum_scale_factor 默认50,0.2,只有表内行数据update/delete超过autovacuum_vacuum_threshold autovacuum_vacuum_scale_factor*table row num之后,才会触发vacuum
6) autovacuum_analyze_threshold autovacuum_analyze_scale_factor 默认50,0.1,数据修改量超过 autovacuum_analyze_threshold+autovacuum_analyze_scale_factor*table row num 默之后,才会触发vacuum的表分析
7) autovacuum_freeze_max_age autovacuum_multixact_freeze_max_age触发强制freeze的事务时间点 默认2亿与4亿 题外说一下,对于数据库里面的表,不会等到到达这个限制之后才去freeze,默认情况下,在autovacuum_freeze_max_age*0.95的事务数量时候,就会开始冻结操作,也可以通过vacuum_freeze_table_age(表级别粒度)参数控制
8) vacuum_freeze_min_age 参数,如果表的这个参数设置了,每次vacuum时候,行事务id大于这个数字的时候,都会被设置freeze
9) autovacuum_vacuum_cost_limit 与 autovacuum_vacuum_cost_delay 当vacuum操作的cost超过limit,则把vacuum延后指定的时间.cost来源是vacuum_cost_limit参数默认200,

猜你喜欢

转载自www.cnblogs.com/binliubiao/p/12654686.html