GaussDB(DWS)列存(auto)vacuum特性整理(二)——列存vacuum已知规格整理

举报
东篱把酒 发表于 2024/01/20 16:40:29 2024/01/20
【摘要】 本文主要梳理DWS列存vacuum的触发条件、已知约束等

主表空间回收

autovacuum触发条件

列存普通表和分区表只有单dn子分区的脏页率大于autovacuum_analyze_scale_factor/2%(默认70/2)且死元组数达到 RelDefaultFullCuSize * 缩放系数 后,才会发起对该表的autovacuum

RelDefaultFullCuSize 默认 6w
分区越多,系数越小

普通表和分区数0,24之间 系数 1

分区数25,49之间 系数 1/2

分区数50,99之间 系数 1/4

分区数大于等于100 系数 1/8

比如分区数90,则死元组数阈值 1.5w;分区数190,则死元组数阈值 7.5k

重写触发限制

列存普通表和分区表只有单dn子分区的文件脏页率大于autovacuum_analyze_scale_factor(默认70)且文件大小大于col_min_file_size(32M-1GB) * 缩放系数 后,才会发起对该CU文件的重写

普通表和分区数0,24之间 系数 1

分区数25,49之间 系数 1/2

分区数50,99之间 系数 1/4

分区数大于等于100 系数 1/8

比如col_min_file_size为32MB时,分区数90,则文件大小需要满足8MB;分区数190,则文件大小需要满足4MB

autovacuum单dn上单次重写最大只重写1GB数据,超过大小的会在下次触发再重写

空间回收触发限制

只在有完成重写但未回收的CU文件时触发,且同一个CU文件不会和重写在同一次vacuum触发

deta表merge

autovacuum触发条件

列存delta表或hstore表在如下两种情况下会触发deltamerge:

1.delta表中数据超过6w行

2.有存活数据且距离上次deltamerge间隔超过1小时

辅助表清理

autovacuum触发条件

830100前版本无限制,每次autovacuum都会触发辅助表清理,830100及之后版本只在如下两种情况触发辅助表清理:

1.辅助表中有死亡元组且距离上次清理间隔超过1小时

2.辅助表中的死亡元组数超过存活元组数量的20%

索引清理

列存索引清理目前只支持btree索引清理

autovacuum触发条件

enable_col_index_vacuum开启且满足辅助表清理的触发条件

小CU0CU合并

autovacuum触发条件

小CU0CU清理受两个guc参数控制

autovacuum_compaction_rows_limit:默认-1关闭,可设置为(-1 – 5000)的整数,控制小CU的阈值。

autovacuum_compaction_time_limit:默认0关闭,可设置为(0 - 10080)的整数,单位是分钟,代表可以设置从1分钟到一周的时间范围,控制autovacuum合并小CU的时间触发维度

同时有如下5个约束:

1.autovacuum关闭,或者autovacuum_max_workers设置0,或者colvacuum_threshold_scale_factor设置为-2,都会导致自动合并小(0)CU关闭

2.列存表只支持0CU的清理,不支持小CU合并

3.创建有psort索引的hstore表只支持0CU的清理,不支持小CU合并

5.维度表单独一个小CU且没有脏数据,不会触发小CU合并

vacuum常用guc参数

autovacuum

控制是否启动数据库自动清理进程(autovacuum)

on表示开启数据库自动清理进程

off表示关闭数据库自动清理进程

默认on

autovacuum_max_workers
autovacuum_max_workers_hstore

列存和hstore表的autovacuum清理最大进程数。和autovacuum共同影响autovacuum的行为。

autovacuum_max_workers = 0时,autovacuum被彻底关闭,不会对任何表做清理。

autovacuum_max_workers > 0 和 autovacuum = off,只对系统表和开了delta表的列存表做清理(如vacuum delta表,vacuum cudesc表和delta merge)。

autovacuum_max_workers > 0 和 autovacuum = on,会对所有表做清理。

colvacuum_threshold_scale_factor

控制列存vacuum重写中,重写文件最低dead tuple的比例值。当文件中的dead tuple占(all_tuple - null_tuple)的比例大于此值,该文件才会被重写。

-2表示不会执行vacuum重写,也不会执行vacuum清理;

-1表示不会执行vacuum重写,只会执行vacuum清理;

0-100为dead tuple的比例值。

默认70

col_min_file_size

控制列存vacuum重写中,重写文件的最小值。

整型,单位:KB,32768~1048576。实际生效时会默认向上取整32MB倍数。

默认1GB

enable_col_index_vacuum

控制集群是否进行索引清理。

新安装集群默认开启,老集群升级后默认关闭。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。