tidb server内存使用异常,触发oom

【 TiDB 使用环境`】生产环境
【 TiDB 版本】v4.0.8
【遇到的问题】

tidb server内存使用率激增,导致oom,tidb server自动重启;
通过慢日志找到对应oom时间点的慢查询,Mem_max: 3037036616 达到3GB多
只有大约4条这样的SQL,内存使用率激增50GB左右,和条数对应不上

另外,oom-action =cancel mem-quota-query =1073741824 似乎并没有限制住SQL占用的内存

Time: 2022-05-05T11:37:36.545179746+08:00
Txn_start_ts: 432988969806594255
Conn_ID: 90765
Query_time: 17.350094604
Parse_time: 0.000039856
Compile_time: 0.001640005
Rewrite_time: 0.000854299
Cop_time: 1.920863843 Process_time: 10.885 Request_count: 14 Total_keys: 4025903 Process_keys: 4025886
DB: xxxxx
Is_internal: false
Digest: 4def72691a460700a107bcf9359aa40e0aebaba8fae54044c6bf1d437873fd23
Stats: t_xxx_60042:432988907783324102,t_xxx_9:432988844881870898,t_xxx_60072:432988507568078952
Num_cop_tasks: 14
Cop_proc_avg: 0.7775 Cop_proc_p90: 1.029 Cop_proc_max: 1.288 Cop_proc_addr: xxxx
Cop_wait_avg: 0 Cop_wait_p90: 0 Cop_wait_max: 0 Cop_wait_addr: xxxx
Mem_max: 3037036616
Prepared: false
Plan_from_cache: false
Has_more_results: false
KV_total: 168.178829724
PD_total: 0.000016739
Backoff_total: 0
Write_sql_response_total: 0
Succ: false
Plan:
Plan_digest: d174ff0c76b58a9143f14e1dd3c8b510374589c8570c1c2f5ede7157d34c978e
use xxxxx;
SELECT * FROM v_xxxx LIMIT 100;

v_xxxx --是一个视图,里面是三张表的union 查询,每张表的数据几乎都过亿了

【复现路径】

【问题现象及影响】

【附件】

1 个赞

oom-action =cancel
mem-quota-query =1073741824
是一种落盘处理策略,并不能完全限制内存的占用,部分数据会留在内存中,部分数据会写入到磁盘

如果磁盘还有余量,就不会 cancel 了…

参考这里的回答…

1 个赞

有分区表么?

1 个赞

把SQL执行计划或Plan的内容发下

1 个赞

没有分区

按照你的描述,要加上 最大执行时间的限制,才能满足这个场景的需求了

不过这些都不是最优解,按照最佳实践去优化结构和 SQL ,解决慢查询才是最合适的方式

数据量很大,是否能考虑追加 tiflash 进行加速… 缩小 tidb 节点聚合的一些操作,进行采用算子下推的方式

解决SQL问题吧,不然就算不OOM,大量的磁盘使用也会导致很慢或者卡住的