目录
异常信息:Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 360,005 milliseconds ago. The last packet sent successfully to the server was 360,001 milliseconds ago.
原因分析
可见,一条SQL执行时间超过了6分钟,造成超时的原因有两种
- SQL自身问题,太多复杂、数据量过大等等
- 系统资源不足,导致查询等待
需要去定位异常SQL:查看异常栈信息,分析异常SQL:explain,去定位具体原因
SQL自身问题场景
曾解决过这种情况,发现是表的数据量过大、SQL未命中索引且查询筛选数据过多,导致SQL超时
该情况问题解决:优化SQL,分批次查询
系统资源不足场景
也遇到过该情况,SQL分析发现,是非常简单的查询,执行仅需要毫秒级别,可以判断去与SQL本身无关。就去查看MySQL监控,发现报错时间段慢查询速率达到了峰值,mysql流量突增
解决:去查看该时间段的慢查询列表,解决慢查询;未解决之前,可以避开该时间段去执行