1
1
1
0
专栏/.../

select查询失败,报“no such file or directory”错误

 cchouqiang  发表于  2022-04-26
原创

问题现象

TiDB数据库版本为4.0.0,业务执行一条常规SQL,前端返回查询失败,报错信息如下:

image.png

问题分析

1、跟业务人员确认,该sql不是新上线的,是一直就存在的,突然就执行失败了。

2、检查数据库侧,发现并无报错和告警。

3、跟业务人员了解到sql语句如下:

image.png

4、分析该sql发现,是3张表进行join,而当这条sql使用的内存超过限制时,就会往磁盘上写,也正是报错中的/tmp/tidb目录下面写。

5、tidb对使用临时空间的控制参数如下:

oom-use-tmp-storage:设置是否在单条 SQL 语句的内存使用超出 mem-quota-query 限制时为某些算子启用临时磁盘。

tmp-storage-path:单条 SQL 语句的内存使用超出 mem-quota-query 限制时,某些算子的临时磁盘存储位置。

tmp-storage-quota:tmp-storage-path 存储使用的限额。当单条 SQL 语句使用临时磁盘,导致 TiDB server 的总体临时磁盘总量超过 tmp-storage-quota 时,当前 SQL 操作会被取消,并返回 Out Of Global Storage Quota! 错误

6、根据上述3个参数的描述,该sql之前可以执行成功,突然执行失败,则该sql语句不是超过mem-quota-query和tmp-storage- quota限制导致的,进而去排查tmp-storage-path参数。

7、检查tidb节点tmp-storage-path参数对应的目录,跟报错提示的目录是一样的,那说明问题就出在这里了。

image.png

8、检查每台tidb服务器上的tmp-storage-path参数对应的目录,发现该目录不在了,问题浮出水面。

问题处理

1、在tidb server上创建/tmp/tidb目录。

2、检查crontab是否存在定期删除/tmp内容的脚本,发现后注释掉。

总结反馈

1、当数据库出现问题时,首先想到数据库是否有变更之类的操作,结合报错信息,根据数据库原理,去分析数据库问题点在哪,快速定位、分析、解决问题,保障业务的连续性;

2、对数据库系统进行操作都要谨小慎微,对数据库系统进行变更时都要按照规范流程来执行。

1
1
1
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论