在使用 cursor fetch 的情况下 tidb_mem_quota_query 不生效的问题

【TiDB 使用环境】生产环境
【TiDB 版本】v6.5.12
【问题复现路径】由 6.5.0 升级至 6.5.12
【遇到的问题:问题现象及影响】
发现有些使用 cursor fetch 的数据量比较大的查询的内存使用没有受到 tidb_mem_quota_query 的限制,目前配置限制是 2G,超限操作为 LOG,在 cluster_processlist 中显示如下
image
但同时如果不使用 cursor fetch,那么内存使用就在限定的 2G之内


因为是在升级后才发现这个问题的,我去看了更新文档,发现有一个和 cursor 相关的改动,但是是支持将结果落盘 TiDB should track, limit (and maybe spill) the temporary memory used by CursorFetch · Issue #43233 · pingcap/tidb
不知道什么因素会导致这个问题?

cursor fetch功能的内存限制逻辑未完全适配?用cursor fetch的大查询未受tidb_mem_quota_query约束,而普通查询不受此影响。建议查看官方补丁或临时规避不使用cursor fetch,并关注后续版本修复

1 个赞

看之前贴子是分批查询的,依旧是只要每个批次小于2G,就不不会触发限制。

1 个赞

cursor fetch 变量错误

大查询未受tidb_mem_quota_query 约束

分批,按页查