为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【TiDB 版本】
v4.0
【问题描述】
- 我们发现TIDB 在写入时出现3个节点写入load 非常高,但是其他4个节点几乎没有写入
- 我们查询文档发现可能是由于我们的一张热点表是联合唯一主键,的隐氏自增row_id 导致的单个region 写入过与集中,因此我们使用命令 “ALTER TABLE wap_quality_agg_daily_v2 SHARD_ROW_ID_BITS = 4;” 将数据打散,但是后期发现没有效果,希望能够获取社区帮助谢谢
- 我们发现有是哪个TIKB 节点的load score 非常高但是这三个tikv的磁盘都一样大,可用空间都没达到上下线,不知道会不会是这边的原因导致的
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。
jiyf
(Jiyf)
2
1.热点region:
通过 sql 查询热点 region:
select * from information_schema.TIDB_HOT_REGIONS;
查询热点region上有哪些表和索引,10080是你的tidb status port, regionID 是上面查到的热点regionId:
curl http://{TiDBIP}:10080/regions/{RegionId}
也要看看唯一索引或者其他索引会不会造成热点问题。
- SHARD_ROW_ID_BITS 打散 rowID
使用 “ALTER TABLE wap_quality_agg_daily_v2 SHARD_ROW_ID_BITS = 4;” 后,新插入生成的rowId是打散的,但是要配合 split region才能取得理想的效果。
不打散情况下 rowid 从 0 开始增加,在插入数据量不大的情况下已经插入的 rowid不会很大。
但是打散后,根据生成算法产生的 rowid 很多是较大的值,所以这些较大的值有可能也是落在同一个 region 上面,热点问题仍然存在。
没有split情况下,在插入一定时间后,region 数据多进行分裂,应该也可以解除热点问题的,只不过要一定的时间。
3.从磁盘使用上来看,空间利用率都不算高,各个 store region size 不够均匀,是不是因为热点 region 问题,没有进行调度呢
通过 pd-ctl 命令 scheduler show 看下 balance-region-scheduler 是否有打开
jiyf
(Jiyf)
4
这里主要问题我觉得可能是对于热点region没有调度,实际上wap_quality_agg_daily_v2表的数据已经分散在30+个region上了,压力也不是集中在一个或者极少个region上。
这些wap_quality_agg_daily_v2的region还是集中在其中的三个tikv,balance-region-scheduler可能因为是热点 region 没有对它们进行调度,所以一直是这样子,store的region size 也不够均匀。
目前把写balance-region-scheduler停了,是否在开始慢慢对balance-region-scheduler表的region进行调度了呢。
也可以通过 pd-ctl 手动调度 balance-region-scheduler 的region吧,调度到其他store上面。
jiyf
(Jiyf)
5
尝试下开启 HOT-REGION-SCHEDULER 调度器呢
jiyf
(Jiyf)
9
关闭写 wap_quality_agg_daily_v2 后,region 有调度吗?
貌似没有看到HOT-REGION-SCHEDULER 的调度
不知道是不是系统bug ,有没有啥方法可以手动触发这个HOT-REGION-SCHEDULER
还有个地方就是这边的balance score 和 region size 差异比较大,不知道这个 :scatter-range-scheduler
curl -X POST http://{TiDBIP}:10080/tables/{db}/{table}/scatter
可不可以解决这个分数的问题
jiyf
(Jiyf)
12
scatter-range-scheduler 对于pd统计出来的 hot region 也是不会进行调度的,应该没什么效果。
要不打开 pd debug 日志,看看是不能找到线索
jiyf
(Jiyf)
13
打开 pd -> scheduler -> balance region scheduler面板 region-hot 项是不是值很大。
加这个面板看看
sum(delta(pd_scheduler_event_count{instance="$instance", type=“balance-hot-region-scheduler”}[5m])) by (name)
使用后确实平衡了一些但是写入还是有热点,最终还是系统重装了才解决
Lucien
( Lucien)
18
请问重装是指重现创建了新的表结构,增加 share rowid bites 和 presplit region 么 ?
增加 share rowid bites 和 presplit region 不行,scatter 也不行都试了,最终是TIDB数据备份然后重装了