最近用 Lightning 往集群导了约 2 亿行数据,之后三个 TiKV 里有一个节点 CPU 长期在 80% 以上,QPS 明显不均。我先用 split table region 把热点表拆成了两百多个 region,也开了 PD 的热点调度,但过了一晚热点又集中回同一个节点。怀疑是表用了自增主键导致写入太集中,想请教这种场景下是改用 SHARD_ROW_ID_BITS 加预切分更好,还是调 PD 的调度参数?大家一般怎么处理,region 打散的粒度多少比较合适?
自增主键确实是典型热点源。Lightning 导入时按 rowID 顺序写入,region 边界虽然预切了,但写入是 append 模式,PD 的热点调度只能把 leader 迁移走,raftstore 的 apply 和 compaction 压力还在原节点,所以过一晚又聚回来。
1 个赞
排查思路挺清晰的,不过这种场景 PD 热点调度基本是治标不治本。补充一点:主键是自增整型的聚簇表,行 key 就是主键本身,SHARD_ROW_ID_BITS 是不生效的,得改成 AUTO_RANDOM 再配 PRE_SPLIT_REGIONS 才能把写入打散。我之前类似规模的表 pre-split 16 个 region 起步就够了,后面靠调度自己均衡。另外建议顺手看一眼 Grafana,排除下是不是导入后残留的 compaction 还在跑。