tidb sql执行完成之后,内存释放很忙

【 TiDB 使用环境】生产环境
【 TiDB 版本】4.0.11
【复现路径】查询复杂查询,查询大量数据,并且做了统计 聚合 等操作
【遇到的问题:问题现象及影响】sql 消耗内存大,查询完成之后 内存释放过慢。想请教一下原因以及是否有加快内存释放的方法
【资源配置】16C32G
【附件:截图/日志/监控】

1 个赞

你看到的慢不一定是真的慢,语句执行完毕后很快被GC掉,然后还给了内存分配器,这个时候你看到的还误认为tidb占用很大内存没释放,实际上这部分内存可以给其它语句使用,如果长时间没有其它语句时候,那么内存分配器会慢慢把内存归还给操作系统。因此不需要管内存释放慢的问题,重点是优化SQL。

内部逻辑是这样的么?我们这边做日结的时候,语句很简单,只是数据量比较大,也会出现这种情况,看grafana里的图表,内存释放很慢。

这个感觉不合理,假设我内存32G,我一个sql查询消耗了将近28G的内存,当查询结束后我紧接着查询下一个sql的时候就会把内存打满,发生oom的情况

这个时候应该还没GC掉,那么就可能会OOM,但是你顺序执行的再快也没GC快,所以通常情况下不会发生。还是要具体问题具体分析,看trace到底是哪里占用了内存。

我这边生产应对的办法,对于内存使用过高的SQL要kill ,kill 之前记录SQL,然后分析优化