目前 TiDB 在生成 TiFlash MPP 任务的时候,会根据这个表的所有 region 在所有 TiFlash 之间做一个均衡,比如如果这个表有 100 个region,那么 TiDB 会尽量保证每个 TiFlash 读 25 个 region,你们这个场景里面应该有 4 节点 4 副本,所以应该能保证每个 TiFlash 读 25 个 region 的。
但是 TiDB 只会在一个 query 内部做这种均衡,假设你这个表的 region 比较少,比如极端情况下只有一个 region,然后有 100 个并发来读这个表的话,TiDB MPP目前没有在 query 之间做这种均衡,所以这种情况下是有可能出现各个 TiFlash 之间负载不均衡的情况的。考虑到你们集群 4000 多个表只有 2.3w region 的话,是有可能出现后面这种情况的。
你们可以把 TiDB 的 debug log 开开,对于 MPP 的 query 会有类似下面的 log:
Before region balance xxxx
After region balance xxxx