黄东旭解析 TiDB 的核心优势
380
2019-10-23
内容来源:http://mp.weixin.qq.com/s?__biz=MzI3NDIxNTQyOQ==&mid=2247489983&idx=1&sn=259bc193d8cb764943d7347bfc3a5ec5&chksm=eb163ed5dc61b7c305cac6108859c4e1e03a5d31b558722c257bf39dce9577c39859c7526edc#rd
在 TiDB 的架构中,所有的数据按照 range 划分成一个个 Region 分布在多个 TiKV 实例上。随着数据的写入,一个集群中会产生上百万,甚至千万个 Region。而量变引起质变,单 TiKV 实例上过多的 Region 无疑会带来比较大的负担,进而影响整个集群的性能表现。
本文将介绍 TiKV 核心模块 Raftstore 的处理流程以使大家更好得理解海量 Region 导致性能问题的根源,以及针对这种情况的一些优化手段。
Raftstore 的处理流程
注:该示意图仅仅表意,不代表代码层面的实际结构。
性能问题及优化方法
常见现象
Thread-CPU 下的 Raftstore CPU
参考值:最好低于 raftstore.store-pool-size * 85%
(v2.1 版本中无此配置项,可认为 raftstore.store-pool-size = 1
)。
Raft Propose 下的 Propose wait duration
Propose wait duration 是发送请求给 Raftstore、到 Raftstore 真正处理请求之间的延迟。如果该延迟比较长,说明 Raftstore 比较繁忙或者 append log 比较耗时导致 Raftstore 不能及时处理请求。
参考值:最好低于 50-100ms。
图 3 查看 Propose wait duration
优化方法
>> 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
[raftstore]
raft-base-tick-interval = “2s”
raft-base-tick-interval
是 Raftstore 驱动每个 Region 的 Raft 状态机的基本时间单位,也就是每隔这么久就需要向 Raft 状态机发送一个 tick 消息。显然增大这个时间间隔,可以有效减少 Raftstore 消息数量。raft-election-timeout = raft-base-tick-interval * raft-election-timeout-ticks
raft-heartbeat-interval = raft-base-tick-interval * raft-heartbeat-ticks
raft-election-timeout
间隔内未收到来自 leader 的心跳会认为 leader 出现故障而发起新的选举,而 raft-heartbeat-interval
是 leader 向 follower 发送心跳的间隔,因此增大 raft-base-tick-interval
可以减少单位时间内 Raft 发送的网络消息,但也会让 Raft 检测到 leader 故障的时间更长。raftstore.store-pool-size
为 2,如果在 Raftstore 出现瓶颈的时候可以根据实际情况适当提高,但不建议设置过大以防引入不必要的线程切换开销。raft-base-tick
,也就是不去驱动那些空闲 Region 的 Raft 状态机,那么就不会触发这些 Region 的 Raft 心跳信息的产生,极大得减小了 Raftstore 的工作负担。其他可能出现的问题
PD Leader 切换慢
use-region-storage
,而 v2.1 版本如碰到类似问题建议升级到 v3.0。PD 路由信息更新不及时
approximate size/keys
。那么在 Region 数量比较多的情况下,pd-worker 单线程可能成为瓶颈,造成任务的堆积不能及时处理,因此 PD 不能及时获取某些 Region Meta 信息以致路由信息更新不及时。该问题不会影响实际的读写,但可能导致 PD 调度的不准确以及 TiDB 更新 region cache 时需要多几次 round-trip。Prometheus 查询慢
总结
《TiDB 最佳实践系列文章》是面向广大 TiDB 用户的系列教程,旨在深入浅出介绍 TiDB 的架构与原理,帮助用户在生产环境中最大限度发挥 TiDB 的优势。我们将分享一系列典型场景下的最佳实践路径,便于大家快速上手,迅速定位并解决问题。
往期回顾:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。