tiflash启动消耗大量内存,直接导致OOM

【 TiDB 使用环境】生产环境 /测试/ Poc
生产环境
【 TiDB 版本】
v6.1.5
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】


tiflash启动需要加载什么数据,为什么需要这么大的内存,有没有参数限制启动时消耗的内存?

【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

这个机器上还有其他吗?只有tiflash?

只有1台tiflash

可能是有写入或者变更特别频繁的表添加了TiFlash

混合部署了吗?
可以配置参数限制:
max_memory_usage
max_memory_usage_for_all_queries

参考 TiFlash 配置参数 | PingCAP 文档中心

你调整过tiflash的同步表速度吗?按理来说,默认同步速度占用的资源很少不应该会oom,https://docs.pingcap.com/zh/tidb/v6.1/create-tiflash-replicas#加快-tiflash-副本同步速度

这两个参数加了,没有效果。


启动时IO比较高,不知道是否有关联。

没有调整过,都是默认配置

修改一下配置。

修改什么配置?

只有1台tiflash,那所有的查询都会走这,包括轻便的SQL,那负担能轻吗?

服务器配置比较高,本身查询量也不大。

操作流程是什么样的?没有添加任何tiflash副本,直接扩容了一台tiflash,然后就一直oom?

根据楼主目前的现象来看,可能是tiflash启动的时候有大量数据出现迁移或SQL执行,从而出现高IO和高内存使用的情况。

信息有点少,能否方便把整个tiflash的日志文件脱敏后上传一下,以及tikv的region数量、同步到tiflash的表数据情况也描述下。
再确认下启动的时候,有无正在同步数据到tiflash的表。

1 个赞

不是扩容,手工停tiflash,大概停了10分钟左右,然后重启操作系统,就出现oom了。

1 个赞

有正在同步的表,整个数据量有1T左右。


tiflash3.log.tar.gz (55.8 MB)

1 个赞

同步到tiflash的表或数据是不是太多了?

1 个赞

有额外资源的话,可以尝试直接扩容看看。
我的感觉是tiflash写入不是很占内存,但读取就不好说了。

最好是能当作tiflash完全不存在,让执行计划先不要使用tiflash引擎看看能不能起来。

https://docs.pingcap.com/zh/tidb/stable/system-variables#tidb_isolation_read_engines-从-v40-版本开始引入
不过查了下这个选择查询引擎的参数不支持global修改。
可能需要通过set config在线修改配置文件中的参数
https://docs.pingcap.com/zh/tidb/stable/dynamic-config#在线修改集群配置
参数名如下,
https://docs.pingcap.com/zh/tidb/stable/tidb-configuration-file#engines

把上面的参数改成[“tikv”, “tidb”],即当tiflash不存在,查询不使用tiflash。
然后再尝试重启tiflash,看看能否起来,假如能起来后再把这个参数改回去。

如果不能起来,那可能真的是需要同步的数据太多。可能需要去掉一些表的tiflash副本,减少一些同步写入的压力,再试试看。

大体是这么个思路。

1 个赞

同步的数据过多,不能及时写盘