写点什么

排查分析 Empty regions 较大原因

  • 2022 年 7 月 11 日
  • 本文字数:1782 字

    阅读完需:约 6 分钟

作者: Becky_Guo 原文来源:https://tidb.net/blog/0b1b8ff3


问题背景:

通过 granfan–>pd–>region health 图表监控到 empty region 较多, 且此集群目前业务并不多,数据量也很小,初始化时只创建了较表。

问题排查:

查看 region merge 相关参数:

max-merge-region-size:


## 控制 region merge 的大小上限,当 region 大于指定值时 pd 不会将相邻的 region 合并 (默认 20)


max-merge-region-keys:


## 控制 region merge 的 key 上限,当 region 大于指定值时 pd 不会将相邻的 region 合并 (默认 2000)


merge-schedule-limit:


## 同时进行 region merge 调度的任务数,设置为则关闭 region merge(默认值 8)


如下,这些参数都是默认值,


查看 region 的 split 和 merge 频率相关参数,

patrol-region-interval:


## 控制 replicaChecker 检查 region 监控状态的运行频率,越短则运行越快 (10ms)


split-merge-interval:


## 控制对同一个 region 做 split 和 merge 的操作间隔,对应新 split 的 region 一段时间不会 merge(默认 1h)



测试 ddl 时与分配的 region 是否会 merge:

突然想到,空 regions 多的集群在 ddl 时使用了 region 预分配参数,查看相关表时只有 1 个 region, 在社区咨询老师说是被 merge 了。

创建测试表并预分配 region, 查看 region 数是指定的:

检查预分配 region 是否 merge

根据以上 split-merge-interval 参数,1 小时后测试表的 guo004 空 regions 将被回收:



即使是 ddl 预分配的 region, 如果没有 regions 为空的话,都会自动 merge.

查看空 regions 信息:

参数说明:


approximate_size:估算的 region 的数据量大小,单位为 MB


approximate_keys:估算的 region 内的 key 的个数


注意关注 approximate_size、approximate_keys 的值。

查看所有空 region 信息:

$ ./pd-ctl region check empty-region |more


查看单个 region 信息:

$ ./pd-ctl  region 217800


或者通过系统表 TIKV_REGION_STATUS 查看:

(我个人更倾向于查系统表,比对的可视度更强些):



通过以上信息显示一个 regions 的 END_KEY 是另一个 region 的 START_KEY, 结合 APPROXIMATE_SIZE 和 APPROXIMATE_KEYS 字段的值,可知部分空 region 是连续的。


检查跨表合并是否启用

enable-cross-table-merge:


## 设置是否开启跨表 merge(默认 v4.0:false,v6.0:true)



测试启用跨表合并是否能降低空 region 数:

检查当前空 region 数:

测试环境的 empty region 也比较多,如下图:



启用跨表合并:

启用跨表何必后空 region 数:

在 grafana 上看 region health 状态,empty region 数量已经为 0:



问题处理:

启用跨表合并,可以减少或至 0 空 region 数据量


操作命令:$ ./pd-ctl config set enable-cross-table-merge true 即可。

综上所述:

通过 granfan–>pd–>region health 图表监控到 empty region 较多:

查看 region merge 大小相关参数:

max-merge-region-size:


## 控制 region merge 的大小上限,当 region 大于指定值时 pd 不会将相邻的 region 合并 (默认 20)


max-merge-region-keys:


## 控制 region merge 的 key 上限,当 region 大于指定值时 pd 不会将相邻的 region 合并 (默认 2000)


merge-schedule-limit:


## 同时进行 region merge 调度的任务数,设置为则关闭 region merge(默认值 8)


如果以上参数设置太小或不合理可以适当调整让 region 加速 merge


如果以上参数设置合理 (一般默认值就可以),请检查 region merge 频率参数

查看 region 的 split 和 merge 频率相关参数,

patrol-region-interval:


## 控制 replicaChecker 检查 region 监控状态的运行频率,越短则运行越快 (10ms)


split-merge-interval:


## 控制对同一个 region 做 split 和 merge 的操作间隔,对应新 split 的 region 一段时间不会 merge(默认 1h)


如果以上参数设置过大或不合理可适当调小,但也不建议过小。


如果设置合理 (一般默认值就可以),请检查跨表合并参数。

检查跨表合并是否启用

enable-cross-table-merge:


## 设置是否开启跨表 merge(默认 v4.0:false,v5.0 及其后版本:true)


跨表合并参数 v5.0 及其后版本默认已经启用,使用 v5.0 及其后版本的应该不太会出现这个问题。


使用 v4.0、小于 v5.0 的版本或 enable-cross-table-merge 未启用情况下可能会出现 empty region 较多。


一般多 DDL on table 情况下, enable-cross-table-merge 结果较为明显。


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
排查分析Empty regions 较大原因_性能调优_TiDB 社区干货传送门_InfoQ写作社区