tidb v6.0.0每隔10s跑一个updateTiFlashStores任务

【 TiDB 使用环境】测试环境 【 TiDB 版本】v6.0.0 【遇到的问题】 搭了一个v6.0.0集群常常鲜,搭建起来之后,看日志,有一个比较让我疑惑的地方,就是在tidb.log里面,每隔10s会打印这样一行: [2022/04/26 14:28:33.853 +08:00] [INFO] [ddl_tiflash_api.go:346] [“updateTiFlashStores finished”] [“TiFlash store count”=0]`
【问题现象及影响】


【附件】

tidb_4000.log (35.8 KB)

有几个问题想知道:

  1. 这个的作用是什么?为什么集群没有TiFlash还会跑这个?
  2. 有没有什么办法关闭?
  3. 感觉对网络有一定的影响,蹲一手回复。
2 个赞


已有相关的 issue~

3 个赞

这个日志和 TiFlash 的副本管理机制有关。

  1. 这个的作用是什么?为什么集群没有TiFlash还会跑这个?
    它的作用是定期向 pd 同步集群中所有的 TiFlash store 元信息。通过这些元信息,TiDB 可以获知各个 TiFlash 节点上各个表的同步进度。
    因为集群的成员是动态变化的,所以即使目前集群中没有 TiFlash,也需要检测。
  2. 因此,这个是 TiFlash 的必要管理机制,不推荐关闭。
  3. 目前将同步时间设置为10s,主要是希望当一个 TiFlash 节点上线之后,TiDB 能够在较短的时间内发现。如果对网络存在影响,我们可以尝试增加同步的时间间隔(但这样 TiDB 会更慢地发现新的 TiFlash 节点)

也就是说这是类似于一个定时任务,想知道,tidb里面有没有一种逻辑,能够知道集群中有没有tiflash,有就开启,没有就关闭,我就粗略看了眼源码,这一段逻辑是写在for循环里面的,加一段if判断应该可行。
集群成员的每一次动态变化,pd应该都是知道的吧,所以能不能由pd发送一个指令,控制tidb关闭or开启该项检测?

不过,确实像github issue里面说的那样,这项检测的日志打印的过于频繁了,10s一次,对于集群诊断,问题处理都有一定的影响,相信DBA们在排查问题的时候,打开日志一看,满屏的 [“updateTiFlashStores finished”] [“TiFlash store count”=0] ,一定会很头大

这个日志设置的初衷,是为了方便直接在 TiDB 日志中排查 TiFlash 节点的情况。
但你说的确实,我们会将它降低为 debug 级别。

好滴,刚看了pr记录,原来是本人,感谢大佬解惑

我觉得得看几点:

  1. 如果说是通过一个配置文件来确定这个集群是不是配置了 tiflash,我觉得应该不可行,因为集群成员是动态的,并且这个配置文件放到哪个组件下面也很奇怪
  2. TiDB 类似 tidb_allow_mpp 的开关,但这个涉及的是是否通过 mpp 查询,和集群中是否有 TiFlash store 是对应不上的,所以不能直接用这个语义。所以说也许可以引入一个默认开启的开关,如果确实不需要管理 TiFlash 副本,就将它关掉。
  3. 据了解,目前 pd 不往 tidb 推送。它确实会 schedule 一些 operator,但这是对 TiKV 的交互。

关于这个开关的问题,确实不大能够通过增加一个配置的方式去解决,这个配置无论是放在tidb的config还是在tiflash的config,亦或者PD下,都显得有点奇怪。

不过,我还是希望,有某种手段能够识别到集群组件的变化,进而去控制组件的部分行为。

确实不胜其扰,:sweat_smile:

https://github.com/pingcap/tidb/issues/34223
https://github.com/pingcap/tidb/pull/34230

看到代码已经merge了

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