TiFlash 内存预估存在放大的问题

在设置了set global tiflash_mem_quota_query_per_node = 60 * 1 << 30;
后查询报错:ERROR 1105 (HY000): other error for mpp stream: Code: 0, e.displayText() = DB::Exception: Receiver state: ERROR, error message: Exchange receiver meet error : Code: 0, e.displayText() = DB::Exception: Receiver state: ERROR, error message: Code: 0, e.displayText() = DB::Exception: Receiver state: ERROR, error message: Code: 0, e.displayText() = DB::Exception: Memory limit (for query) exceeded caused by 'out of memory quota for data computing' : would use 60.00 GiB for data computing (attempt to allocate chunk of 1114112 bytes)

设置为 set tiflash_mem_quota_query_per_node = 0;后执行成功,

但是看监控实际上两个 Compute 节点最大内存使用才不到 10 GB。所以感觉 TiFlash 的内存预估不准,容易将本来能跑成功的语句拦截了。

1 个赞

另外在跑的时候,也没有启动落盘,而是跑的时候直接报错让 SQL 中断了。。

PS: 其实在执行成功时候配置文件参数也要跟着改profiles.default.max_memory_usage_for_all_queries = 0, 默认是0.8,预估超过机器内存的80%也会报错。

请问 能不能提供相关的日志来排查问题?

需要什么日志来协助排查啊?

找到报错的 sql 在 tiflash 日志里的 id 或者 start ts 作为关键字,把相关日志全部检索出来

上面是执行时的报错内容,可以看到执行成功时内容是"memory_peak\":143686734598,换算了下是 133.82 G,已经超过机器的内存值了。 详细的 analyze 信息是
analyze.txt (78.4 KB)

现在开启 TiFlash 存算分离架构,不能设置内存限制,设置会导致本来能跑过的 SQL 跑不过去了,去掉限制后,又会导致本来一些想限制的 SQL 跑成功了,直接引起 TiFlash OOM了,头疼[苦涩]。

请问环境中的 tiflash 是什么版本?能否帮忙复现一下问题,并提供过程中的 tiflash 日志来协助排查问题?

是7.5.4版本,这里提供的日志还不足够么?