第 54 期:MySQL Too many open files 报错

社区王牌专栏《一问一实验:AI 版》全新改版归来,得到了新老读者们的关注。其中不乏对 ChatDBA 感兴趣的读者前来咨询,表达了想试用体验 ChatDBA 的意愿,对此我们表示感谢 🤟。

目前,ChatDBA 还在最后的准备阶段,会尽快跟大家见面。想预约试用的朋友,可以扫码文末的 意见反馈 填写调研问卷。我们正在对 DBA 群体试用大模型的情况进行调研,这对我们打磨 ChatDBA 的使用体验非常重要。

下面让我们正式进入《一问一实验:AI 版》的第 54 期。

问题

MySQL 报错:Too many open files 怎么处理?

实验

1. 将问题丢给 ChatDBA

我们先把这个问题丢给 ChatDBA,让他看下具体出了什么问题。

左侧为流程分析画布,展示 ChatDBA 对此问题的排查逻辑;右侧为互动区域

2. ChatDBA 协助问题排查

我们将问题输入进 ChatDBA 后,系统反馈先进行信息的收集。

这里 ChatDBA 要求输入一些系统的基本情况,因为该报错很有可能是由于文件描述符数量引起的,要求输入的信息分别为:

  • open_files_limit
  • ulimit -n
  • Innodb open files

open_files_limit

ulimit -n

innodb_open_files

这时,ChatDBA 发现这些配置基本上满足需求,所以要求输入文件打开的数量、临时表情况等,所以接下来就将当时系统的监控图片上传到 ChatDBA。

监控图片

首先,ChatDBA 准确的识别出了监控图像的内容,同时也猜测虽然参数配置的合理,但是临时文件过多是导致该问题的主要原因,通过查看监控也发现,确实临时文件在报错期间增长很快。

ChatDBA 接下来推测是慢查询导致的临时文件过多,所以要求我们输入对应的慢查语句。

接下来我们将对应的 SQL 语句给到 ChatDBA,这时他根据经验推测了一个原因是由于该语句未充分利用到索引,所以让我们给出对应的执行计划。

3. ChatDBA 给出解决方案

我们将 EXPLAIN 的结果截图给到 ChatDBA 后,发现其根据截图内容推测出了问题关键,并且给到了对应的解决方案。

4. 实验总结

这个案例比较有趣,一般情况下 Too many open files 报错和文件描述符配置不当有关。但是该案例中,是由于数据表没有有效的利用到索引导致,后续观察表结构发现,JOIN 关联条件中等号左右两个字段的数据类型不同,一个是 VARCHAR 类型一个是 INT 类型,所以导致该条 SQL 语句没法用到索引,进而创建了非常多的临时文件,所以导致了报错。

问问 ChatGPT-4o

我们也将相同的问题送给了 ChatGPT-4o,让我们看看效果如何。

我们也将相同的问题输入到了 ChatGPT 中,发现其在第一步也发现是文件描述符的问题,但是当我们给到其具体参数后后续的操作步骤没有办法收集或定位到更多有效的信息。

什么是 ChatDBA?

更多技术文章,请访问:https://opensource.actionsky.com/

关于 SQLE

SQLE 是一款全方位的 SQL 质量管理平台,覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库,为开发和运维提供流程自动化能力,提升上线效率,提高数据质量。

✨ Github:https://github.com/actiontech/sqle

📚 文档:https://actiontech.github.io/sqle-docs/

💻 官网:https://opensource.actionsky.com/sqle/

👥 微信群:请添加小助手加入 ActionOpenSource

🔗 商业支持:https://www.actionsky.com/sqle

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个误表示打开的文件数超过了操作系统的限制。当MySQL服务器尝试打开一个新的文件时,操作系统会限制打开的文件数目,如果超过了限制就会出现这个误。 要解决这个问题,可以尝试以下几个步骤: 1. 确认误日志:首先,查看MySQL误日志文件,通常是在MySQL的数据目录下的`hostname.err`文件中。日志中会显示具体的误信息和可能的原因。 2. 增加文件描述符限制:可以通过修改操作系统的文件描述符限制来解决这个问题。在Linux系统中,可以通过修改`/etc/security/limits.conf`文件来增加限制。例如,可以添加以下行来增加文件描述符的限制: ``` * soft nofile 65535 * hard nofile 65535 ``` 然后重新登录或重启系统生效。 3. 优化MySQL参数:如果增加文件描述符限制后问题仍然存在,可以尝试优化MySQL的一些参数来减少打开的文件数目。例如,可以尝试减少`table_open_cache`和`open_files_limit`参数的值。 4. 检查数据库连接池:如果你使用了数据库连接池,确保连接池正确关闭和释放连接,避免连接泄露。 5. 检查应用程序代码:有时候,应用程序在使用数据库连接后没有正确关闭连接,导致连接没有释放。确保在使用完数据库连接后,及时关闭连接。 通过以上一些步骤,你应该能够解决MySQL的"OS errno 24 - Too many open files"误。如果问题仍然存在,可以进一步查看MySQL的文档或寻求专业的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值