通常块中被删除的行是逻辑上删除,物理上还保留在块中,如果长时间不清理,会造成垃圾空间膨胀,而清理的工作一般是由AutoVacuum后台进程来完成
vacuum处理对数据库中的指定表或所有表执行一下任务:
- 移除死元组: 1) 删除死元组并对每个页面的活元组进行碎片管理. 2) 删除指向死元组的索引元组
- 冷冻老的Txid: 1) 必要时冻结老元组的txid 2)更新冻结的与系统目录(pg_database和pg_class)相关的txid 3)如有可能,移除clog中不必要的部分
- 其他: 1)更新已处理表的FSM和VM 2)更新几个统计数据(pg_stat_all_tables等)
autovacuum守护进程:1)默认每分钟执行一次,由autovacuum_naptime参数定义
2)默认调用三个worker进程进程工作,有autovacuum_max_workers参数定义
vacuum和full vacuum
先来看看vacuum -- > 可以清理了块里面无效的空间,但是空间并未释放给系统
full vacuum --> 这种是把块里面有效的数据拿出来放在一个新块里面,然后旧块中无效数据被释放掉了,这种释放物理释放,把释放空间返给了操作系统了
参考
标签:释放,删除,autovacuum,18,元组,pg,vacuum,PG From: https://www.cnblogs.com/zmc60/p/17978455