建立企业网站的技能,wordpress 阿里秀,电子商务网站设计是什么,房地产新闻最新消息今天文章目录 0.简介1.概念及使用方式2.工作原理2.1 主要功能2.2 清理流程2.3 防止事务id环绕说明 3.使用建议 0.简介
在之前介绍MVCC文章中介绍过常见的MVCC实现的两种方式#xff0c;一种是将旧数据放到回滚段#xff0c;一种是直接生成一条新数据#xff08;对于删除是不删除… 文章目录 0.简介1.概念及使用方式2.工作原理2.1 主要功能2.2 清理流程2.3 防止事务id环绕说明 3.使用建议 0.简介
在之前介绍MVCC文章中介绍过常见的MVCC实现的两种方式一种是将旧数据放到回滚段一种是直接生成一条新数据对于删除是不删除PG采用的是第二种虽然实现上较为清晰简单但面临着数据膨胀的问题。本文将介绍其清理命令vacuum主要包含概念和使用方式以及实现原理。
1.概念及使用方式
vacuum是一个SQL命令可以进行垃圾回收并选择性的分析数据库其语法如下主要看full和analyzefull的作用下面会详细介绍analyze的作用就是同时收集表内容的统计信息结果放在pg_statistic系统目录中然后查询计划就能使用这个信息去制定高效的计划。
VACUUM [ ( option [, ...] ) ] [ table_and_columns [, ...] ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ table_and_columns [, ...] ]where option can be one of:FULL [ boolean ]FREEZE [ boolean ]VERBOSE [ boolean ]ANALYZE [ boolean ]DISABLE_PAGE_SKIPPING [ boolean ]SKIP_LOCKED [ boolean ]INDEX_CLEANUP { AUTO | ON | OFF }PROCESS_MAIN [ boolean ]PROCESS_TOAST [ boolean ]TRUNCATE [ boolean ]PARALLEL integerSKIP_DATABASE_STATS [ boolean ]ONLY_DATABASE_STATS [ boolean ]BUFFER_USAGE_LIMIT sizeand table_and_columns is:table_name [ ( column_name [, ...] ) ]2.工作原理
2.1 主要功能
1清理失效元组。 2生成分析数据 3更新VM(visibility map)。 4 防止事务id环绕。
2.2 清理流程
其流程如下
清理失效元组第一步是要识别出那些是失效元组在之前的MVCC中介绍过其有xmin和xmaxxmax表示被那个事务删除如果已经提交了且没有小于xmax的事务继续执行那么就说明这个元组失效知道怎么查找失效元组后我们看清理步骤。 找到dead tuples后会构建该表的dead tuples的链表该链表存储在缓存中然后会去移除dead tuples指向的index。这步也就是先清理index。移除完index后就需要开始处理其本身在这不使用vacuum和vacuum full存在区别vacuum只是去把dead tuples的部分标记为可重用空间然后整理其剩余元组将其重新排列也就是表的实际空间并没有减少只是可以重用了而vacuum full是将目标表有效tuples拷贝到新表中然后删除目标表然后重建索引。删除完dead tuples后就需要更新VM和FSM这两个的作用在前面文章PG逻辑存储层级和物理存储结构中有描述。最后就是可以更新统计信息及相关系统表。
2.3 防止事务id环绕说明
PG的事务id是32位的最多就是2的32次方也就是4294967296所以其采用的是循环利用的方式同时MVCC是比较依赖事务ID如果插入的XID大于当前事务XID的行版本那么就是将来的事务对当前事务不可见。有以上两个基础不难想象如果运行足够长的时间xid计数器会变为0可能会导致所有以前的数据都被认为是未来的也就是所有数据都看不到这只是事务id回卷的一种场景PG解决这种场景的方式是通过vacuum识别存在很长时间的数据将其记录为FREEZE这些数据不遵循XID比较原则对所有事务可见。 3.使用建议
可以看见Vacuum比较于Vacuum full有着更快的执行速度但其不能减小膨胀后的空间运行时FREEZE很老的记录。而Vacuum full能回收更多空间但其运行缓慢运行后所有记录都被FREEZE其需要全程加独占锁不推荐生产环境使用。 处理上述两种主动清理PG还支持字段清理即Autovacuum其可以根据需要设置使用在晚上使用较少时执行清理尽可能减少影响。