单条 SQL 的内存使用阈值设置无效?

【 TiDB 使用环境】生产环境
【 TiDB 版本】v6.1.1
【遇到的问题】

操作内容:
INSERT INTO xx SELECT * FROM yy LIMIT 2000000;

表现:

  1. 单条sql 的内存设置为1G(默认设置),但是 information_schema.processlist 中查询到的sql实际使用内存为 3.3G,很疑惑? 而且不管我怎么调整limit 的数量,始终都是3.3 个G 的内存占用。
  2. 另外,从日志里看,每过一段时间会触发并停止一个算子的线程,该sql能否完成执行,就看操作时间跟算子停止步伐的比赛了。。

测试:
随后,我调整了 tidb_distsql_scan_concurrency = 12(此前设置为了24),随后再跑sql的话,内存也掉了一半,变成了1.6G。

疑惑:
官方文档里描述 tidb_mem_quota_query 参数时说,该参数控制了单条sql的内存占用,但是也没说跟 tidb_distsql_scan_concurrency (scan并发度)有关啊?那这个tidb_mem_quota_query = 1G 的限制,到底是怎么限制的?

【附件】



你关注错地方了,好好看看自己的截图,我给你打了个标记

限制是两个方面的,一个是执行时间,一个是占用内存大小,达到限制后可以选择cancel 或者 继续

我知道这个 cancel 和 log 的动作,也知道 sql内存超过这个阈值之后,会逐步关停scan线程,直到最后一个线程,依旧超过内存 就做 cancel/log 的动作。 我的意思是,这个参数难道仅仅只是一个阈值的设置,而不是一个实际的内存限制吗?

上面不是写了么,就是一个 阈值 的设定而已…

并不是硬性的限制…

:joy:原来如此。。。那就明了了

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