tidb内存控制

版本:V5.4

现象:执行一条SQL语句时,服务器内存耗光

服务配置中限制了内存的,单条SQL30G,总共50G,但是没起作用
image

如何才能限制住?防止一条不恰当的大SQL把服务器打爆?

1赞

另外,这条SQL出问题之后,使用如下语句找到会话杀掉了:
show processlist
kill tidb xx

但是服务器内存好像很缓慢的才能释放出来,好像是还有片段在运行:

有什么办法能够干净的终止这个查询并且立刻释放内存?

1赞

只能立即中止查询, 内存要等到 GC 之后才会释放…

1赞

好吧,谢谢

有专家能给指导下内存控制的问题吗?
我期望最起码能做到控制tidb进程的总内存,不要把服务器内存吃光
现在控不住,服务器经常挂掉

1赞

试试resouce_control参数控制内存

1赞

非常感谢指点,这样确实可以控制住总内存了。碰到大查询,tidb服务触线崩掉,没有把服务器搞死,这样tidb本身能很快重启起来:
image

能不能再指点一下,怎么才能控住单条query的内存呢?
我按照文档设了单条query的内存上限是30G,没起作用,这条sql用了50G内存把tidb打死了:
image

1赞

确认下是否设置了oom-action这个配置 TiDB 配置文件描述 | PingCAP Docs

学习了 !!

没有这个配置,应该用的是默认值cancel
有些SQL是会报出来OOM错误的,但是有些SQL就限制不住,把TIDB打崩

  1. 具体 SQL 是什么?发一下表结构和查询语句。文本格式。
  2. 同时SQL 中用到的表的统计信息上传一下。
    https://docs.pingcap.com/zh/tidb/stable/statistics#导出统计信息

目前单条SQL只有这个一个参数,tidb确实存在这问题,也不太清楚具体memory计算的是那部分,我曾经有SQL有text字段导致200多G内存被吃光后才oom

防止一条不恰当的大SQL把服务器打爆? 别的不好说,这个就是要做上线前的SQL审核。这个不仅仅针对tidb,是个数据库都要做这个工作。

还是可以检查下配置