参数配置:
mem-quota-query: 314572800
oom-action: cancel
tidb 5.4.0 需要6min,v4.0.8 需要4s
explain analyze先看下2个版本下执行计划是否一致
看下 oom-use-tmp-storage tmp-storage-path 参数设置,和指定路径下再SQL执行时有没有产生临时文件
默认的参数是:
root@10.101.22.58 08:33:09>show config where name like ‘%tmp%’;
±-----±-------------------±--------------------±-------------------------------------------------------------+
| Type | Instance | Name | Value |
±-----±-------------------±--------------------±-------------------------------------------------------------+
| tidb | 10.101.22.20:4000 | oom-use-tmp-storage | true |
| tidb | 10.101.22.20:4000 | tmp-storage-path | /tmp/0_tidb/MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA=/tmp-storage |
| tidb | 10.101.22.20:4000 | tmp-storage-quota | -1 |
| tidb | 10.101.22.195:4000 | oom-use-tmp-storage | true |
| tidb | 10.101.22.195:4000 | tmp-storage-path | /tmp/0_tidb/MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA=/tmp-storage |
| tidb | 10.101.22.195:4000 | tmp-storage-quota | -1 |
| tidb | 10.101.22.58:4000 | oom-use-tmp-storage | true |
| tidb | 10.101.22.58:4000 | tmp-storage-path | /tmp/0_tidb/MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA=/tmp-storage |
| tidb | 10.101.22.58:4000 | tmp-storage-quota | -1 |
±-----±-------------------±--------------------±-------------------------------------------------------------+
9 rows in set (0.02 sec)
修改成:
tmp-storage-path: /tmp
5.4.0 有生成空的record 文件夹,tidb 4.0.8没有
[root@titb-test-1 tmp-storage]# ls
_dir.lock record
[root@titb-test-1 tmp-storage]# du -sh *
0 _dir.lock
0 record
5.4版本有开启swap没。看看node exporter里相关监控
看起来是符合预期的,直接查近一亿数据的表不带 where 条件过滤,在 mem-quota-query = 314572800
的条件下应该是 OOM 的。
大佬 他的问题是不同版本 同样数据量和SQL ,OOM时执行的时间差异很大
您好,看截图是 5.4.0 执行的时候 tidb-server 没有 oom,server 往 mysql cli 发送数据期间 mysql cli oom 了,4.0.8 是执行期间 tidb-server 检测到超出内存,主动 cancel 了,阶段不同,所以执行时间不同。5.4.0 应该是发送了一段时间 mysql cli 才 oom,4.0.8 是 检测到内存过大直接 cancel 了。
怎么看出来是发送期间oom的
是对oom 处理机制不同了吗