tikv v8.1.1 一天出现三百多次transfer-hot-read-leader事件

【 TiDB 使用环境】生产环境 有一个tikv集群,版本是v8.1.1

当前环境是juicefs+tikv, 其中Juicefs是1.2,tikv是 v8.1.1
这个环境在当前吞吐很低,属于业务低峰期的时候,也出现了大量的事件

下面给下集群架构

# tiup cluster display xxxx
Cluster type:       tidb
Cluster name:       xxxx
Cluster version:    v8.1.1
Deploy user:        tikv
SSH type:           xxxx
TLS encryption:     enabled
CA certificate:     xxxx
Client private key: xxxx
Client certificate: xxx
Dashboard URL:      https://D:2379/dashboard
Grafana URL:        http://A:3000
ID                 Role        Host         Ports        OS/Arch       Status   Data Dir                                 Deploy Dir
--                 ----        ----         -----        -------       ------   --------                                 ----------
A:3000   grafana     A  3000         linux/x86_64  Up       -                           .../grafana-3000
B:2379   pd          B  2379/2380    linux/x86_64  Up       .../pd-2379                 .../pd-2379
C:2379   pd          C  2379/2380    linux/x86_64  Up       .../pd-2379                 .../pd-2379
D:2379   pd          D  2379/2380    linux/x86_64  Up|L|UI  .../pd-2379                 .../pd-2379
A:9090   prometheus  A  9090/12020   linux/x86_64  Up       .../prometheus-8249/data    .../prometheus-8249
A:8089   tidb        A  8089/10080   linux/x86_64  Up       -                            ../tidb-8089
A:20160  tikv        A  20160/20180  linux/x86_64  Up       .../tikv-20160              .../tikv-20160
B:20160  tikv        B  20160/20180  linux/x86_64  Up       .../tikv-20160              .../tikv-20160
C:20160  tikv        C  20160/20180  linux/x86_64  Up       .../tikv-20160              .../tikv-20160

【日志信息】

提取了pd的日志,过滤如下:

# cat  pd_2025_03_22.log  |grep "transfer-hot-read-leader" |grep "operator finish" |wc -l
301


详细的日志如下
pd_2025_03_22.log (518.5 KB)

【系统配置参数值】

{
  "replication": {
    "enable-placement-rules": "true",
    "enable-placement-rules-cache": "false",
    "isolation-level": "",
    "location-labels": "",
    "max-replicas": 3,
    "strictly-match-label": "false"
  },
  "schedule": {
    "enable-cross-table-merge": "true",
    "enable-diagnostic": "true",
    "enable-heartbeat-breakdown-metrics": "true",
    "enable-joint-consensus": "true",
    "enable-tikv-split-region": "true",
    "enable-witness": "false",
    "high-space-ratio": 0.7,
    "hot-region-cache-hits-threshold": 3,
    "hot-region-schedule-limit": 4,
    "hot-regions-reserved-days": 7,
    "hot-regions-write-interval": "10m0s",
    "leader-schedule-limit": 4,
    "leader-schedule-policy": "count",
    "low-space-ratio": 0.8,
    "max-merge-region-keys": 200000,
    "max-merge-region-size": 20,
    "max-movable-hot-peer-size": 512,
    "max-pending-peer-count": 64,
    "max-snapshot-count": 64,
    "max-store-down-time": "30m0s",
    "max-store-preparing-time": "48h0m0s",
    "merge-schedule-limit": 8,
    "patrol-region-interval": "10ms",
    "region-schedule-limit": 2048,
    "region-score-formula-version": "v2",
    "replica-schedule-limit": 64,
    "slow-store-evicting-affected-store-ratio-threshold": 0.3,
    "split-merge-interval": "1h0m0s",
    "store-limit-version": "v1",
    "switch-witness-interval": "1h0m0s",
    "tolerant-size-ratio": 0,
    "witness-schedule-limit": 4
  }
}

【监控】

系统负载监控

PD有三个不同的节点,上面没有混布tikv server,只有PD服务

下面是Hot Region’s peer distributio

下面是region health

下面给出Balance的监控

下面是hot read监控

下面是scheduler监控

下面是etcd监控

从这里观察PD的分数都是一致的,并没有在当前看出有太大的差异。包括region的数量

想问下从这里的监控中,能否获取到什么原因导致在业务低峰期会大量触发了transfer-hot-read-leader , 这里不确定是不是参数设置不对还是其他的?

非常感谢~

// 0326补充
补充trhead cpu监控图像

//0327信息补充
补充pd scheduler config信息

region-max-keys	1.44 Mil
region-split-keys	960.00 K
max-merge-region-keys	200.00 K
region-schedule-limit	2.05 K
region-max-size	144.00
region-split-size	96.00
replica-schedule-limit	64.00
max-snapshot-count	64.00
max-pending-peer-count	64.00
max-merge-region-size	20.00
merge-schedule-limit	8.00
leader-schedule-limit	4.00
hot-region-schedule-limit	4.00
max-replicas	3.00
hot-region-cache-hits-threshold	3.00
enable-replace-offline-replica	1.00
enable-remove-extra-replica	1.00
enable-remove-down-replica	1.00
enable-makeup-replica	1.00
low-space-ratio	0.80
high-space-ratio	0.70
tolerant-size-ratio	0

去 PD Dashboard 看看热点流量

参考这个排查热点region:
PD 调度策略最佳实践 | TiDB 文档中心
另外, TIDB_HOT_REGIONS_HISTORY`表提供了关于历史热点 Region 的相关信息,参考下面文档:
TIDB_HOT_REGIONS_HISTORY | TiDB 文档中心

看下热点监控

建议还是正常使用 tidb 集群,rawkv 用的人比较少,缺乏经验交流,

这是txnkv, 架构是juicefs+tikv的方式

请问你所说的热点监控是还需要哪些? PD监控这里我提供的几个监控图像就是当天的。还需要哪个我补充下,多谢

看看thread cpu的监控,在tikv-details下有thread cpu

你好,已经补充了,在内容最后,麻烦看看是否足够,多谢

PD hot read监控也看了,三个PD节点的数值其实都差不多的,感觉没有很大差异。

juicefs+tikv 第一次看到这么玩,感觉很好玩

计数项:region_id
region_id 汇总
924 18
1276 40
1776 2
4005 16
4029 42
5149 84
5153 60
5753 158
6629 2
6633 2
6773 116
6825 4
6833 56
6893 2
(空白)
总计 602

可以看一下次数比较高的region 是不是请求时间太多了


这个问题我还特地看了下,因为当前整天业务吞吐都是很低很低的,可以理解为几乎没有多少读取。因为在周六。然后我还观察了一下某一个小时内的情况,发现是不是tikv server的调度器发现有store的数量不均衡,然后就频繁触发hot read leader change这些? 我这里给出的图片是hot read在一个小时内的情况。这里看到几乎也是没有读取流量的了

关于这个region read 大量触发的原因找到了,因为这里每个region大部分都是超过了region-max-size的,经过排查在v 8.1.1 这里是144MB , 然后在v8.5的时候是256MB了, 因此这里就会频繁触发这个切换了。这里其实应该还有一个参数有影响,那就是定时扫描的时间周期, 当然本质上调整这个参数不太友好的。

后续可以考虑优化一个参数,如果不是在业务高峰期的时候,也就是集群吞吐不大的时候,哪怕有少量的region热点或者一些不均衡,应该也不用频繁触发的。 希望能增加一个触发region 迁移的次数的统计和阈值,每个周期达到一定次数的时候,建议应该增大迁移的时间间隔,避免在短时间内频繁触发。

请问为何会比较介意 leader 切换?一天三百多次,平均差不多 5 分钟一次,这不算什么

当然介意呀,这是业务低峰期就五分钟一次了,如果是业务高峰期触发次数更频繁。最重要的是日志现在很多打印get timestamp too slow的报错,这里当初猜测大概率就是PD leader负担太重了,然后INFO日志级别下,就只有这个事件是最多的,因此这里可能也是导致PD 负担大的一个原因。

其次是这里很多迁移是不必要触发的,这样无形中会加大了etcd落盘的次数等等,这里延伸出来的问题可能就是hot region迁移是否到底必要默认自动触发。

这几个事情不是必然的因果关系,get timestamp too slow 不一定就是由于热点调度引起,而热点调度与业务量也不是成比例关系。(另外,我印象中 region 迁移是不需要写 etcd 的,但不是很确认)

如果现在的主要问题是 get timestamp too slow,可以直接先从这里入手。先看看出现 get timestamp too slow 时候 PD 的 gRPC 和 etcd 面板