【 TiDB 使用环境】生产环境
【 TiDB 版本】 7.5.0
【遇到的问题:问题现象及影响】 你好,我想问一下,现在我们在跑sql的时候,会导致内存OOM,请问怎么限制单挑SQL的内存使用,或者限制超过多少内存的SQL的并发查询数
【 TiDB 使用环境】生产环境
【 TiDB 版本】 7.5.0
【遇到的问题:问题现象及影响】 你好,我想问一下,现在我们在跑sql的时候,会导致内存OOM,请问怎么限制单挑SQL的内存使用,或者限制超过多少内存的SQL的并发查询数
可以按用户来限制资源的使用,这个可能会更合理
参考下:
https://docs.pingcap.com/zh/tidb/stable/tidb-resource-control#使用资源管控-resource-control-实现资源隔离
社区还有专门的实践帖子,可以自行搜索
tidb_mem_quota_query 可以看下这个文档
https://docs.pingcap.com/zh/tidb/stable/configure-memory-usage#如何配置-tidb-server-实例使用内存的阈值
楼上正解
限制SQL内存使用是一方面,主要是问题SQL把TiDB Server进程搞死,要真正解决问题,还是得优化SQL
tidb_mem_quota_query控制整个会话的内存大小(包括会话中的所有sql占用的总内存量),超过后会触发 tidb_mem_oom_action 这个参数指定的操作。
以上是设置单条SQL的内存为4G,你可以根据自己的情况调整数值
如设置单个SQL的最大使用内存为1GB,可以使用如下两种方法
方法一:set session tidb_mem_quato_query=1 << 30; (会话级,也可以设置为全局,session改成 global)
方法二:select /*+ MEMORY_QUOTA(1024) */ from test;
SET SESSION tidb_mem_quota_query = <memory_limit>;
tidb_mem_quota_query
tidb_mem_quota_query
tidb_mem_quota_query
楼主问的是限制单条SQL的内存,如果仅仅是这个问题的话,那么其他大佬提到的 tidb_mem_quato_query 参数就可以限制一条SQL的最大使用内存,当超过的时候sql会直接被干掉,并返回报错信息。
但按楼主的题干描述,需要的其实是解决OOM的问题。那么目标就转化为要解决或者是缓解OOM的情况,那么楼主可以有下面的处理措施:
1.在数据库侧
2.在业务侧
顺着这些思路处理和执行,如果能落实下来,楼主的问题应该就可以大大缓解了。
tidb_mem_quota_query
如果解决了,记得标注一下正确答案。
使用系统变量 tidb_mem_quota_query
来配置一条 SQL 执行过程中的内存使用阈值,单位为字节。
tidb_mem_quota_query
OOM是整个数据库被杀掉还是这个连接会被杀掉
学习打卡