【TiDB 4.0 PCTA 学习笔记】- 3.7.8 How to Deal With Hotspot Issues(如何处理数据热点问题)@1班+杨一

课程名称:课程版本(301)+ 3.7.8 How to Deal With Hotspot Issues

学习时长:

30

课程收获:

tidb上的热点 成因以及如何解决。

课程内容:

热点的原因,干预手段,以及处理方法

何为热点,

  1. 小部分数据提供了远超于其他部分数据的负载。热点会有不同的表现形式比如CPU消耗,qps ,数据流量。

  2. tidb底层机制导致局部数据过热。tidb发现热点会自动均衡到其他tikv,除非不能发现,单个热点会导致整个集群性能瓶颈。

  3. 如果不能消除热点,只是增加tikv节点是不能提升性能。

顺序写

写入请求集中在单个tikv实例。少量tikv实例表现cpu负载高,io压力大。

导致顺序写的原因大概有以下几种

  1. 业务模式导致顺序写,在表尾部持续的增加数据,
  2. 表带有的索引包含递增或者递减的吃。
  3. 带有自增主键的表。
  4. 新创建的表刚刚写入数据时,会集中写第一个region,导致热点集中。数据量大了就可以进行分裂。

热点小表

特别小的数据被频繁访问,数据集中到一个region中。tikv无法调度手段解决负载问题。导致热点小表的原因

  1. 大量范围扫描,比如range scan
  2. 下推计算中包含复杂的表达式

此时需要观察coprocessor metrics 的监控数据。小范围的更新操作也会导致热点小表现象。

region分布倾斜

包含多个region的表,其数据不一定是均匀分布的,此现象成为数据倾斜。如果该表被频繁访问,数据集中的那个region 可能会有性能瓶颈。

  1. 中等规模的表,因为数据分布不均匀,更可能产生数据倾斜。
  2. 数据倾斜会导致读,写热点集中
    高并发的范围扫描,一定范围的随机更新,插入。

解决方法

  1. 分区表

Tidb 使用基于hash的分区表解决热点问题,在底层数据分布 不同的分区就是不同的表。表创建完成 就包含多个region,Tidb能更快的完成数据调度。

  1. SHARD_ROW_ID_BITS

    针对rowid顺序写导致的热点问题。创建表或者通过alter 设置该属性,启用该特性之后 新写入的数据不是严格递增而是随机生成。

  2. 预分裂region

    效果最好,根据表的数据量把region提前分裂合适的数量,可以主动调度将空的region均匀的分布到tikv中。 要求对数据分布比较了解。

  3. follow read
    主要解决小表的读热点问题。该特性允许从follower replica上读取数据。可以通过tidb_replica_read 参数来分配流量

    set tidb_replica_read=‘follower’

    set tidb_replica_read=‘leader + and + follower’

  4. scatter range

    pd 将表的region 平均的分布到整个tikv中。
    开启

    curl -X POSThttp://{TiDBIP}:10080/tables/{db}/{table}/scatter

    关闭 ,等待调度完成,需要及时关闭

    curl -X POST http://{TiDBIP}:10080/tables/{db}/{table}/stop-scatter

  5. shuffle leader/region
    当前面的方式无法解决region倾斜时,可以采用shuffle leader/region作为非常规手段。
    随机移动leader或副本;shuffle leader解决读热点问题;shuffer region解决写热点问题;通过pd-ctl控制调度器

创建:

pd-ctl scheduler add shuffle-region-scheduler
pd-ctl scheduler add shuffle-leader-scheduler

删除:

pd-ctl scheduler remove shuffle-region-scheduler
pd-ctl scheduler remove shuffle-leader-scheduler

同学你好,感谢参与 TiDB 4.0 课程的学习!

本篇笔记逻辑清晰、内容丰富,被评选为优质笔记,将额外获得 20 积分,并在 「TiDB 培训」分类下获得“置顶”权益,积分兑换规则将于近期开放,敬请关注!

期待您继续产出优质内容!

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。