课程名称:(301)3.7.8 How to Deal With Hotspot Issues(如何处理数据热点问题)
学习时长:10min
课程收获:了解如何处理 TiDB 集群的热点问题
课程内容:热点问题;row_id;写热点现象;热点小表;分区表;预分裂 region
产生热点原因
由于查询模式或者底层TiDB机制限制导致少部分数据出现热点;热点不一定导致热点问题,TiDB会通过调度解决部分热点问题;热点引起的性能问题无法通过添加TiKV实例解决
顺序写:持续追加记录、索引值持续增加或减少等;auto_increment;向新表插入数据(region分裂)
热点小表:小表(一个region);高并发访问,范围扫描等读请求,可能涉及复杂表达式;Coprocessor的下推表达式
region倾斜分布:中等规模(几百resion);region集中在某些TiKV实例;读/写热点(频繁的range scan),高并发随机插入更新
预防热点问题
表分区:hash partition;适用于写热点(将顺序写变成分散写,或新表集中写入时)
shard_row_id_bits:消除隐藏列row_id引起的写热点,row_id随机
create table t(c int) shard_row_id_bits = 4;
alter table t shard_row_id_bits = 4;
预分裂region:插入数据前先分裂region,效果好
1.使用值范围分裂:
SPLIT TABLE table_name [INDEX index_name] BETWEEN (lower value) AND (upper value) REGIONS region_num
2.使用划分点分裂
SPLIT TABLE table_name [INDEX index_name] BY (value_list) [, (value_list)]…
解决热点问题
follower read:允许从follower副本读取数据;适用于读热点,小表(一个region);使用tidb_replica_read变量开启
set @@tidb_replica_read = ‘follow‘;
set @@tidb_replica_read = ‘leader-and-follower’
scatter range:开启后PD将表的regions均匀分布在TiKV实例中;修正region分布倾斜
curl -X POST http://{tidb_host}:10080/tables/{db}/{table}/scatter
curl -X POST http://{tidb_host}:10080/tables/{db}/{table}/stop-scatter
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
学习过程中遇到的问题或延伸思考:
- 问题 1:
- 问题 2:
- 延伸思考 1:
- 延伸思考 2:
学习过程中参考的其他资料
无