postgresql autovaccum自动清理

本文详细介绍了PostgreSQL的autovacuum功能,包括其作用、自动清理和分析机制、配置参数调整及大表的优化方案。讨论了如何通过调整autovacuum_vacuum_threshold、autovacuum_analyze_threshold、vacuum_cost_delay等参数来改善数据库性能,并提供了查询死元组和改变行数的SQL示例。
摘要由CSDN通过智能技术生成

 为什么要开启autovaccum

在Postgresql做delete操作时,数据集(也叫做元组 (tuples))是没有立即从数据文件中移除的,仅仅是通过在行头部设置xmax做一个删除标记。


update操作也是一样的,在postgresql中可以看作是先delete再insert;


      这是Postgresql MVCC的基本思想之一,因为它允许在不同进程之间只进行最小的锁定就可以实现更大的并发性。这个MVCC实现的缺点当然是它会留下被标记删除的 元组( dead tuples),即使在这些版本的所有事务完成之后。


      如果不清理掉那些dead tuples(对任何事务都是不可见的)将会永远留在数据文件中,浪费磁盘空间,对于表来说,有过多的删除和更新,dead tuples很容易占绝大部分磁盘空间。而且dead tuples也会在索引中存在,更加加重磁盘空间的浪费。这是在PostgreSQL中常说的膨胀(bloat)。

数据库臃肿是数据库服务器性能不佳的主要原因之一,dead tuples数据过多,造成表相关update/deletion操作性能下降,同时查询也会变慢。如果过于频繁会造成cpu和磁盘读写的繁忙,同样会造成性能问题。

autovacuum自动清理机制

autovacuum是postgresql数据库是一个后台进程,在默认配置下,随数据库自启动。自动清理会检查被大量插入、更新或删除元组的表。是一个非常频繁的操作。

autovacuum的作用 

1、清理表中的过期死元组
2、防止业务表膨胀
3、更新表的统计信息以供优化器使用
4、autovacuum launcher使用stats collector后台进程收集统计信息来确定autovacuum候选列表 

autovacuum功能

autovacuum会做两件事件:一是vacuum,二是analyze。

 

自动清理vaccum

1.功能


清理过程相当简单,它从数据文件中读取页面(默认8kB数据块),并检查它是否需要清理.如果没有死元组,页面就会被丢弃而不做任何更改.否则它被清理(死元组被删除)


2.清理比较值


更新或删除的元组数
失效元组的数量从统计信息收集器获得,它是一个半准确的计数(它只是半准确,是因为在高负载的情况下某些信息可能会丢失)。


3.死亡元组数查询


select relid,schemaname,relname,n_dead_tup from pg_stat_user_tables;


4.触发条件


清理阈值 = 清理基本阈值 + 清理缩放系数 * 元组数


5.配置参数


① 清理基本阈值:autovacuum_vacuum_threshold,默认值为50
② 清理缩放系数:autovacuum_vacuum_scale_factor,默认值0.2

 自动分析analyze

1.功能


更新查询计划器使用的统计信息以选择或选择执行查询的最有效计划。
ANALYZE的效率稍差,因为VACUUM的成本与死元组的数量成正比(当很少/没有时成本比较低),ANALYZE必须在每次执行时从头开始重建统计数据。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值