如何衡量 tidb 集群 空region 过多呢

如何衡量 tidb 集群 空region 过多呢? 对于集群 空region 数据量达到多少 时 判断 其会造成pd 异常的呢? 有什么计算比例吗?还是就凭自己估量呢

可以通过 prometheus 和 grafna 去查阅空 region 的数量
一般出现大量的 删除或者清空数据的时候,会出现较多的 空region,
简单讲:就是空洞现象

不需要做什么判断,空region 多了会占用cpu和内存,因为需要维护 region 的状态,然后上报到 PD

有个集群 从grafana 上看到 空region 有将近200 个, 不确定会不会对集群造成影响

方法五:开启 Region Merge

注意

从 TiDB v3.0 开始, Region Merge 默认开启。

开启 Region Merge 也能减少 Region 的个数。与 Region Split 相反, Region Merge 是通过调度把相邻的小 Region 合并的过程。在集群中删除数据或者执行 Drop Table / Truncate Table 语句后,可以将小 Region 甚至空 Region 进行合并以减少资源的消耗。

通过 pd-ctl 设置以下参数即可开启 Region Merge

Copy

>> pd-ctl config set max-merge-region-size 20
>> pd-ctl config set max-merge-region-keys 200000
>> pd-ctl config set merge-schedule-limit 8

详情请参考如何配置 Region Merge(英文)PD 配置文件描述

同时,默认配置的 Region Merge 的参数设置较为保守,可以根据需求参考 PD 调度策略最佳实践中提供的方法加快 Region Merge 过程的速度。

https://docs.pingcap.com/zh/tidb/stable/massive-regions-best-practices#方法五开启-region-merge

1 个赞

会有影响的,你参考楼上的操作方式,调整下 Schedule 的数量,加速合并
合并完成以后,再把 数量调整还原就可以了

可以通过grafana 持续观测 empty region 的数量

一般默认的调度参数足够了,pd自己会调度进行region merge,将空region进行合并,删除大量数据的情况下,empty region数量会上升,我们线上,正常情况在10左右,偶尔会100-200的情况,超过500可以设置个告警,一般很少出现这么多

1 个赞

通过历史曲线看 一个月内保持在 200左右 看曲线图 基本是直线 感觉好像没有对这些 empty region 做merge 这种现象正常吗?

不太正常… 即使是慢,也会有合并动作的…

你用的啥版本?

1 个赞

感谢 我们现在有2集群都比较高 180 左右 和270左右 浮动 , 检查了其他集群 empty region 就 30左右, 监控只保留了1个月的数据,看不到之前是从什么时候 空region 变多的 处理监控有日志可以看到这个信息吗?

v4.0.6 版本的, 从dashboard 看日常的 sql delete 和 update 数量不是很多呀

除了 update 和delete,还需要 关注下 ddl 的操作: drop,TRUNCATE 这些操作

没有 drop,TRUNCATE ,上线以后就在没有做过 ddl 了

突然想起来 我们这个环境部分表创建时加 SHARD_ROW_ID_BITS=4 、PRE_SPLIT_REGIONS=2 参数

但是现在查看相关表regions 只有一个,刚开问题问有老师说 预分配的 region 被merge 了 , 但从当前 regions 来看 好像也不对呀

没有更多的背景和现象,很难去找问题
建议收集一下信息后,重新开个新贴…

好吧 , 很奇怪…

此问题已解决,

针对我的环境 原因有2:
1、是在ddl时使用率预分配region参数;
2、我的环境未启用扩表合并(**enable-cross-table-merge: false)
具体可查看:https://tidb.net/blog/0b1b8ff3

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。