线上tidb集群是否存在regions分配不均匀的情况,需要怎么操作

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

是否存在分配不均匀的问题,是否需要打散regions,具体操作流程是什么样的? 谢谢!

看起来 leader 数量分布不是很均匀, 可以看一下 pd 界面的 hot region 图, pd-ctl 里看一下 pd 的配置

pd配置: » cluster { “id”: 6707191707121201016, “max_peer_count”: 3 }

» config show { “replication”: { “location-labels”: “”, “max-replicas”: 3, “strictly-match-label”: “false” }, “schedule”: { “disable-location-replacement”: “false”, “disable-make-up-replica”: “false”, “disable-namespace-relocation”: “false”, “disable-raft-learner”: “false”, “disable-remove-down-replica”: “false”, “disable-remove-extra-replica”: “false”, “disable-replace-offline-replica”: “false”, “enable-one-way-merge”: “false”, “high-space-ratio”: 0.6, “hot-region-cache-hits-threshold”: 3, “hot-region-schedule-limit”: 2, “leader-schedule-limit”: 4, “low-space-ratio”: 0.8, “max-merge-region-keys”: 0, “max-merge-region-size”: 0, “max-pending-peer-count”: 16, “max-snapshot-count”: 3, “max-store-down-time”: “30m0s”, “merge-schedule-limit”: 8, “patrol-region-interval”: “100ms”, “region-schedule-limit”: 4, “replica-schedule-limit”: 8, “scheduler-max-waiting-operator”: 3, “schedulers-v2”: [ { “args”: null, “disable”: false, “type”: “balance-region” }, { “args”: null, “disable”: false, “type”: “balance-leader” }, { “args”: null, “disable”: false, “type”: “hot-region” }, { “args”: null, “disable”: false, “type”: “label” } ], “split-merge-interval”: “1h0m0s”, “store-balance-rate”: 15, “tolerant-size-ratio”: 5 } }

pd 界面 Scheduler 看一下

information_schema.TIDB_HOT_REGIONS 这个表看一下,按 MAX_HOT_DEGREE 倒序一下

leader/region 调度

  1. leader 和 region 的分布 都是根据 对应的 score来调度的,和 leader 和 region count 无关
  2. 影响 region score 的因素是 region 的 size 和 盘的剩余容量,这里的 size 是估值,大概占物理盘的大小和
  3. 影响 leader score 的因素是 leader 的 size 和 盘的剩余容量无关,这里的 size 是估值,大概占物理盘的大小和
  4. 最终目的是 score 均匀接近

看起来是符合我们调度策略的。

从监控来看,一直有一个 region 读流量较大,可以尝试使用 split_hot_region.py 脚本来查看下,这个热点 region 的相关信息。初步估计是有小表热点。

可以使用我们 pre split 功能:https://pingcap.com/docs-cn/v3.0/reference/sql/statements/split-region/#pre_split_regions

表是空的

大佬 我是新手 能否详细说明下步骤,不太清楚怎么操作,谢谢!

你先用脚本看看,读流量较高的 region 的相关信息。 我们集群是在空跑还是在压测呢? 从pd 信息来看,score 接近,分布是预期的。

正常线上在使用

OK 跑下脚本 先看下内容把。

pd-ctl 里执行 region 结果输出到文件里,发一下,感觉有很多空的 region ,可以考虑开一下 region merge 功能

文件在微信里上传了

看了一下文件,里面大部分是空的 region ,需要做 region 合并,pd-ctl 中修改下面两个参数,之后看下效果

config set max-merge-region-size 2
config set config set max-merge-region-keys 8000000

之后可以观察一下 region 数量,以及 pd 面板 scheduler 界面

大佬 跑出来发现130221和139653这2个region读写较大

  • 可以多看几个,比如 1 改为 10
  • 这个表大概率就是热点表了,你可以新建一个帖子,问一下热点如何处理。at 下相关值班人员帮忙看看。

  • 看起来 user_log 是一个读热点表。