[FAQ] 解决已经开启 region merge, empty-region-count 仍然很多问题

【问题澄清】

检查监控,发现 [overview - pd - region health[empty-region-count]] 空 region 达到了 559K,但是已经开启了 region merge,空 region 也没有明显的下降,这是为何?

image

【知识点引入】

参数解释:

  • pd 参数解释:

< v3.1 使用

namespace-classifier 默认是 table,默认情况下,region merge 不会进行表表合并,所以在集群中有大量的 drop/truncate table, create table, drop database 的时候需要修改该参数(namespace-classifier = " default")

>= v3.1 使用

enable-cross-table-merge 默认 false,如果为 true,则表示可以合并不同表中的两个区域,仅当 key type 为 “table” 时此选项才有效。

tikv 参数:

  • split-region-on-table,默认值为 true,开启按 table 分裂 Region的开关,为了配合合并空 region 需要将其设置为 false。

【操作】

  • tidb-ansible 部署,在中控节点修改 pd.yml 然后执行 ansible-playbook rolling_update.yml --tags=pd,tikv 来使修改生效。
  • tiup 部署,使用 tiup cluster edit-config cluster-name[service_configs] pd/tikv 修改参数,通过 tiup cluster reload -R pd,tikv 将参数生效,(PS:reload 不是 restart,当前 reload 有些参数可能不生效,未来版本将 reload 默认调用 pd-ctl 去执行)。当前为了保证修改参数的准确性,这边推荐 tiup ctl 或者 pd-ctl 修改 pd 参数。

【参数效果】

peer 和 empty region count 在逐渐减少

【继续优化】

  • 上图中,影响 region 合并的参数为 merge-scgedule-limit,当前设置为 8 ,可以在集群空闲时将此参数调大加快 merge 速度。

【知识扩展】

如果开启 region merge,通过 pd-ctl 开启此功能,v3.0 版本已经默认开启。

>> 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

【参考案例】

【文档阅读】

  1. 【TiDB 最佳实践系列】PD 调度策略最佳实践
  2. https://github.com/pingcap/pd/blob/2c251bd8f1810bb0e26b8d972f7233417f60bce9/conf/config.toml#L87
  3. https://pingcap.com/docs-cn/stable/best-practices/massive-regions-best-practices/