循环分页查询时,tidb内存持续上涨

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】
v4.0.12
【问题描述】
我们有个离线下载的功能,就是分页从数据库查询数据。现在出现分页查询时,内存占用太多,9w数据占用5g内存,多人同时用,占用更多。并且延迟会持续上升,越来越好慢

问下是什么问题,有没有优化建议

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

  1. explain analyze sql 反馈下这个sql的执行计划
  2. 集群拓扑和规格麻烦发一下。
  3. tidb-server 内存占用非常多的时候,麻烦采集 profile 文件。
    curl -G http://{TiDBIP}:10080/debug/zip?seconds=30" > profile.zip

执行计划.txt (1.8 MB)
profile.zip (456.3 KB)




循环分页查询,数据库内存没释放

  1. 从 profile 看内存总共占用了200多M,没有明显的问题
  2. 从 执行计划看,这个sql 占用了几百M,看起来 SQL 比较复杂,看下业务上能否优化,减少内存占用。比如使用中间表等。
  3. 麻烦反馈下这个sql对应的慢日志,同时采集下内存占用很多时的profile吧。看看是否有其他情况。
  4. 上传下表结构和执行的sql

sql.sql (10.8 KB)
profile.zip (821.3 KB)

内存疯涨时采集的profile日志

截图上有个最大内存比较大,5.6G。
sql是比较复杂,关联表比较多,表结构没办法给弄。可以远程帮忙看下吗

  1. 业务优化sql,比如使用中间表
  2. 扩容提高并发的能力。
    也看看其他人还有什么建议吧。

这边发现不带排序,这条sql内存占用大概2G,加上排序内存占用大概6G

流向日查询.sql (11.0 KB)
执行计划1420.txt (77.9 KB)

排序会在 TiDB Server 进行聚合计算,会消耗大量的内存存储中间结果。建议尝试一下 TiFlash MPP 提高 TiFlash 并发计算,减少 TiDB Server 聚合计算成本消耗。或者采用楼上同学建议,拆解中间表来缓解。

已沟通解决,tidb serve节点聚合消耗了内存,等待5.0.2版本优化

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