文档章节

mysql超时异常的问题查询

bfleeee
 bfleeee
发布于 2015/12/01 12:06
字数 597
阅读 170
收藏 3

###一、源起 同事在调试程序时遇到了Mysql异常 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure Last packet sent to the server was X ms ago ###二、分析 这是由于JDBC客户端的mysql连接在长时间不活动之后断开了,断开之后的首次请求会抛出这个异常。查询mysql超时设置:show variables like ‘%timeout%’,查看和连接时间有关的MySQL系统变量,得到如下结果:

输入图片说明 他的一个查询程序跑了148秒,在同一个事务里再执行update操作时,程序抛出了上面的异常。 一开始我以为是在这个查询执行时间过长,mysql主动切断了连接。但是很奇怪的是在navicat单独执行这个sql,五六秒就能得到结果,虽然也很慢,但是没那么离谱。 这时候我怀疑,是不是结果在程序中早就查出来了,但是由于程序本身的原因,导致总的执行时间超过了wait_timeout设置的值,导致mysql server端切断了不活动的连接。 在验证这个问题时,由于同事的maven依赖很多,导致依赖关系非常乱。日志用的是log4j2,但是mvn dependency:tree查看到了很多log4j-1.2、slf4j各种桥接的依赖,很多都是由于依赖dubbo暴露接口打成的jar包,而形成的间接依赖。在做了一些列exclusion后,终于能看到全面的日志。之后就发现了log4jdbc打印的很多的ResultSet日志:

输入图片说明

这个sql查询到了9K+的结果,这个resultset日志打了大概2W行,可以看到是log4jdbc配置问题导致程序在获取ResultSet后浪费了大量的时间进行结果分析和日志记录,导致mysql连接超时。 ###三、解决 由于项目本身用的是druid和Mybatis,都具有日志打印的功能,对于log4jdbc的需求其实很小,就把log4jdbc去掉了。问题解决。 ###四、总结 如果不对表象进行分析,很难真正的解决问题。日志对于程序调试还是尤其重要的。另外wait_timeout的值过小,是否会引起druid连接池在连接空闲时,总是重新获取连接,这个问题回头再议。

© 著作权归作者所有

bfleeee

bfleeee

粉丝 14
博文 33
码字总数 26316
作品 0
海淀
高级程序员
私信 提问
MySQL Authentication Failed问题分析与解决对策

作者介绍 在应用端,偶尔看到有如下报错:Authentication to host 'xxxx' for user 'yyyy' using method 'mysqlnativepassword' failed with message: Reading from the stream has failed.......

携程技术中心
2017/12/04
0
0
程序连不上数据库的总结

连不上mysql时一般有以下四种报错: 1:Can't connect to MySQL server 2:Lost connection to MySQL server 3:Sorry, due to line fault, temporarily unable to browse, we are dealing with......

emma_cql
2017/08/24
0
0
数据库连接池应用中数据库服务器断开超时连接的问题

数据库应用开发过程中,我们可能会遇到一个问题:应用使用了数据库连接池,每经过指定时间后,发出到数据库服务器的任何请求都会失败,而且有且仅有一次失败,之后的正常访问都没有问题。尤其...

如风达
2015/09/18
154
0
深度分析 | GDB定位MySQL5.7特定版本hang死的故障分析#92108

原创: 洪斌 本文目录 1. 问题背景 2. 问题分析 2.1 SHOW GLOBAL VARIABLES 2.2 SLAVE SQL THREAD 2.3 SHOW GLOBAL STATUS 2.4 问题1: 新连接为什么无法建立? 2.5 问题2:查询操作为什么超时?...

爱可生
07/02
21
0
Yearning v1.2 正式发布,Web 端 SQL 审核平台

Yearning 1.2正式发布了。 Yearning SQL 审核平台,基于 Vue.js 与 Django 的整套 sql 审核平台解决方案。 提供基于 Inception 的 SQL 检测及执行。 更新内容: 查询支持字段脱敏 支持多级审...

cookieY
2018/07/10
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

uni app 零基础小白到项目实战

$emit 子组件传给父组件$ref 父组件操作子组件 公用模板 uni-app全局变量的几种实现方法 const websiteUrl = 'http'const now = Date.now || function() { return new Date().getTime......

达达前端小酒馆
32分钟前
7
0
Tomcat是如何实现异步Servlet的

前言 通过我之前的Tomcat系列文章,相信看我博客的同学对Tomcat应该有一个比较清晰的了解了,在前几篇博客我们讨论了Tomcat在SpringBoot框架中是如何启动的,讨论了Tomcat的内部组件是如何设...

木木匠
56分钟前
31
0
mysql中间件分享(Mysql-prxoy,Atlas,DBProxy,Amoeba,cobar,TDDL)

hello 各位小伙伴大家好,我是小栈君,这期我们分享关于mysql中间件的研究,也就是数据层的读写分离和负载均衡,希望能够在实际的应用中能够帮助到各位小伙伴。 下期我们将继续分享go语言的系...

IT干货栈
今天
15
0
OSChina 周一乱弹 —— 人生,还真是到处是意外

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享lil peep的单曲《High School》 《High School》- lil peep 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
1K
13
Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部