排查分析 Empty regions 较大原因
作者: Becky_Guo 原文来源:https://tidb.net/blog/0b1b8ff3
问题背景:
通过 granfan–>pd–>region health 图表监控到 empty region 较多, 且此集群目前业务并不多,数据量也很小,初始化时只创建了较表。
问题排查:
查看 region merge 相关参数:
l max-merge-region-size:
## 控制 region merge 的大小上限,当 region 大于指定值时 pd 不会将相邻的 region 合并 (默认 20)
l max-merge-region-keys:
## 控制 region merge 的 key 上限,当 region 大于指定值时 pd 不会将相邻的 region 合并 (默认 2000)
l merge-schedule-limit:
## 同时进行 region merge 调度的任务数,设置为则关闭 region merge(默认值 8)
如下,这些参数都是默认值,
查看 region 的 split 和 merge 频率相关参数,
l patrol-region-interval:
## 控制 replicaChecker 检查 region 监控状态的运行频率,越短则运行越快 (10ms)
l 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 是连续的。
检查跨表合并是否启用
l 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 大小相关参数:
l max-merge-region-size:
## 控制 region merge 的大小上限,当 region 大于指定值时 pd 不会将相邻的 region 合并 (默认 20)
l max-merge-region-keys:
## 控制 region merge 的 key 上限,当 region 大于指定值时 pd 不会将相邻的 region 合并 (默认 2000)
l merge-schedule-limit:
## 同时进行 region merge 调度的任务数,设置为则关闭 region merge(默认值 8)
如果以上参数设置太小或不合理可以适当调整让 region 加速 merge
如果以上参数设置合理 (一般默认值就可以),请检查 region merge 频率参数
查看 region 的 split 和 merge 频率相关参数,
l patrol-region-interval:
## 控制 replicaChecker 检查 region 监控状态的运行频率,越短则运行越快 (10ms)
l split-merge-interval:
## 控制对同一个 region 做 split 和 merge 的操作间隔,对应新 split 的 region 一段时间不会 merge(默认 1h)
如果以上参数设置过大或不合理可适当调小,但也不建议过小。
如果设置合理 (一般默认值就可以),请检查跨表合并参数。
检查跨表合并是否启用
l 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 结果较为明显。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/799943541d74edc20323b63c7】。文章转载请联系作者。
评论