TIDB Server内存优化咨询

【TiDB 使用环境】生产环境
【TiDB 版本】8.5.1
【部署方式】私有云自建机房
【操作系统/CPU 架构/芯片详情】centos7.9
【集群节点数】 7
【遇到的问题:问题现象及影响】
1、随着集群的使用时间越久,tidb server的内存也不断上涨,长时间都维持在70%~80%左右,有时甚至冲到90%,这种情况正常吗?感觉像内存长时间不释放一样
2、按照文档https://docs.pingcap.com/zh/tidb/stable/configure-memory-usage/进行查看,tidb_mem_quota_query的值设置为8G,也确认了 tidb_mem_oom_action的值为cancel,但是查看tidb的oom日志,发现也没有特别消耗内存的sql

【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面


【其他附件:截图/日志/监控】



机器上free -g看下内存使用情况呢


free -g查看内存使用也挺高的

滚动重启一下试试,如果短期内上升到该水平就是正常的占用

可以定期在业务闲时滚动重启一下

之前重启过,是可以释放的,但是这种问题,只能重启解决吗 :joy:

重启是可以解决,可以平稳运行一两个月吧。但是这种问题,只能靠重启吗 :joy:

SET GLOBAL tidb_server_memory_limit = “32GB”;
可以用这个去限制总的内存,另外tidb_mem_quota_query的值设置为8G 这个是单个sql的最大内存,如果你的大sql并发高很容易内存使用量就上去了。

限制这个tidb_server_memory_limit 有什么影响吗?值设置为多少比较合理,有个什么算法吗?比如我现在tidb服务器的内存是47G,我设置多少较为合理,设置小了有哪些负面影响 :joy:

这个我看了慢查询历史,并没有几个sql能达到8G的,目前最大的只有4G,而且只是凌晨跑个两三次,平时的sql内存还是比较正常的

没有oom可以不管吧。有数据缓存的

但是这看着吓人了,感觉OOM是迟早的事了 :joy:

一般不会的。如果有oom,业务又大就该升级配置了

这不算高啊,tidb也是又缓存的,sql执行完了,不会立刻释放内存的。

最好不要混搭,混搭在一起比较难控制

限定的话,有一定的效果,但是业务上跑起来如果跑不动,又难免要折腾很久

没有更好的办法,你这内存占比也算正常,缓存本身也占用资源,这部分是可以循环利用的

尽量避免大表全表扫描和无索引的 JOIN,你这里感觉是资源释放得慢,但是看着应该是正常

这个占比还是正常的,看着都是业务正常使用时间区间内

主要就是避免oom,如果使用的内存超过限制就会出现查询报错

PD和TiDB都有缓存的数据,没有报错,这种占用应该是正常的

内存有点高,小心oom