tiflash 负载不均衡,如何排查

这个负载跟副本数没有直接的关系,要看数据的分布、是否有热点。

麻烦问下,这个负载是可以复现吗?还是周期性的出现?

请问你们没有开启TiFlash MPP吗?

1、跑的定时任务,可以复现的。 上面的回复 有了。 就是 批量执行一批SQL,之前走tiflash 是全表。后面强制开启索引,就好了。
2、开启tiflash mpp了

  1. 你们测试 tidb 5.1.1 就走索引,选5.1.2 走全表,这个对比需要注意下是否存在参数的区别还有统计信息的区别。
  2. tidb_opt_cpu_factor 设置的比较大是会让SQL更加倾向于走TiFlash的,所以你设置1000很容易走了TiFlash。这个值的默认值是3,可以测试下设置回来,SQL不用加强制索引,应该也是会走TiKV

这些都不能解释 为什么 tiflash 负载不均衡。总是固定2个节点压力高。期望tiflash 像集群一样,能够所有节点参与计算

看起来这是一个点查询。可能这个查询在 TiFlash 上经过过滤后只落在某个 region 上,所以实际上只会在这个 region 的两个副本上查询,因此只有两台机器负载较高。

1 个赞

根据这个火焰图,TiDB 层应该就已经判断数据是落在某一台 TiFlash 机器了,然后直接下推到对应机器执行过滤。

这个查询没有涉及到真正的 MPP。

主要还是跟这个参数有关系 tidb_opt_cpu_factor=10000; , 可能这个导致tidb 优选tiflash ,tiflash 都是 设置2副本 的 , 所以可能会集中在某两个tiflash 节点 。
奇怪的是 5.1.1 好像没有 用到 tidb_opt_cpu_factor , 走的tikv 。

请问一下,你们为什么想到会去改 tidb_opt_cpu_factor 这个参数呢?

当时4.0的时候 很多慢查询希望用tiflash 。 所以就改这个值强制tiflash ,避免开发改一堆hint /+ read_from_storage(tiflash[table])/

如果当前将 tidb_opt_cpu_factor 这个值改回出问题的时候的大小,仍然会走 tiflash 的话
可不可以看一下 explain .... from table use(expected_index) ... 的结果 以及 show stats_meta 的结果

学习一下:+1:

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