线上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 是一个读热点表。