一个数据库配置”net_write_timeout“引起的生产Issue
之前在发生产的时候遇到一个很奇怪的问题,一个查询query方法明明之前用的很好,突然有一天报错,导致整条业务都不能运行,后面发现是因为配置的原因。
·
前言
之前在发生产的时候遇到一个很奇怪的问题,一个查询query方法明明之前用的很好,突然有一天报错,导致整条业务都不能运行,后面发现是因为配置的原因。
故障回顾
不知道大家遇到过这个问题没有,当时我们在发布一个patch补丁中使用了这个query方法,直接在启动的时候报错'The last packet successfull xxxx xxxx',我们第一时间是怀疑是不是网络的问题(因为这个方法之前使用没有问题),然后重启还是报错。
分析问题
因为看报错是超时的缘故,回想项目已经上线了一年,上次使用这个方法还是在半年之前,猜测是数据量加大,加上这个SQL是全表扫描,为什么是全表扫码,因为条件是JSON 结构啊,最后发现竟然是数据量大,导致MySQL返回查询结构超时了。详情是因为”net_write_timeout“这个配置
客户服务器配置:
解决方法
不再使用这个方法,使用ES索引查询 或者 换索引表查询。
反思
MySQL 超时配置有很多,不单单只是Server端的配置。 MySQL 相关超时配置
- wait_timeout:服务器等待活动连接的最长时间(秒)。在超过这个时间后,MySQL 会关闭未活动的连接。默认值:28800 秒(8 小时)
- interactive_timeout:MySQL 客户端工具(如 MySQL shell)与服务器的连接超时。28800 秒(8 小时)
- connect_timeout:服务器等待连接建立完成的时间(秒)。
net_read_timeout
和net_write_timeout
:服务器等待数据包读写完成的超时时间(秒)。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)