解决 select 查询报错 no such file or directory 问题

网友投稿 426 2024-04-26



问题现象

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

解决 select 查询报错 no such file or directory 问题

问题分析

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

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

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

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参数对应的目录,跟报错提示的目录是一样的,那说明问题就出在这里了。

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

问题处理

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

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

总结反馈

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:自动生成 PDF 格式的 TiDB 文档:在 Rocky 9 的实践
下一篇:解决 TiDB DM 报警 DM_sync_process_exists_with_error 的过程
相关文章