环境:

  持久层:JPA

  数据库连接池:druid

  数据库中间件:Mycat

  数据库:Mysql

报错:

  Unable to acquire JDBC Connection

排查步骤:

方法一:

  1、druid配置没有问题。

  2、Mysql连接数正常,但是发现mysql有很多链接没有释放。(用root用户执行:show full processlist ; 指令)

    

    如图:发现很多State = Sleep的链接,链接都很长,一直不释放链接。

  3、kill掉相应的链接。(因为业务数据不是很重要,为了先恢复功能,用此下策)

  4、接着排查代码。发现JPA的save方法,默认更新一条记录使用如下方式:update tb_name set xxx = xxx where id = xxx ; 使用默认的主键进行数据的更新。而业务侧,由于数据庞大使用了数据库的分库分表,mycat作为数据库中间件,该表的路由规则为:根据用户id去摸,进行数据的分库分表。

  问题原因找到:每次执行更新(save)方法时,Mycat都会广播这条sql,当数在插入时,就造成更新方法阻塞等待(锁,事务相关),导致链接不释放。

方法二:

  1、查看mysql事务表,得到thread_id :  select * from information_schema.INNODB_TRX ;  从结果中的:trx_mysql_thread_id 得到线程id

  2、select * from performance_schema.threads where THREAD_ID = 第一步得到的线程id (这一步可以不执行,目的只是为了演示mysql的线程管理,以及相应的查看方法。)

  3、select * from performance_schema.events_statements_current where THREAD_ID =  第一步得到的线程id ;  根据 SQL_TEXT 得到相应的sql语句。

  以上就是mysql通过阻塞的线程,找到代码中相应的sql的方法。

解决方法:

  1、写sql,在更新数据时,修改JPA默认的方式,使用路由规则去更新数据。

  

mysql连接不释放的更多相关文章

  1. mysql连接的一些问题。

    最近网站出现 User 数据库名称 has already more than 'max_user_connections' active connections 的报错,网站瘫痪.有必要研究下这个问 ...

  2. paip.jdbc 连接自动释放的测试

    paip.jdbc 连接自动释放的测试 使用的mysql jdbc3.1.6  以及5.1.7 测试结果,在没有conn.close()的情况哈.. 作者Attilax  艾龙,  EMAIL:146 ...

  3. 深入理解php的MySQL连接类

    php的MySQL连接类.  后面几个show_databases和show_tables....等方法都用了一堆echo,好像一直不喜欢在类的方法里直接用输出语句,不过这也只是列举数据库和表名,构造 ...

  4. MySQL连接问题【mysql_connect和mysql_pconnect区别】

    --MySQL连接问题[mysql_connect和mysql_pconnect区别] -------------------------------------------------------- ...

  5. mysql连接池的使用工具类代码示例

    mysql连接池代码工具示例(scala): import java.sql.{Connection,PreparedStatement,ResultSet} import org.apache.co ...

  6. 用swoole简单实现MySQL连接池

    MySQL连接池 在传统的网站开发中,比如LNMP模式,由Nginx的master进程接收请求然后分给多个worker进程,每个worker进程再链接php-fpm的master进程,php-fpm再 ...

  7. mysql连接池模块

    如果不想程序在查询数据时卡死或等待过长时间,一般不推荐在node中开启一个连接后全部查询都用这个链接并且不关闭.因为node里面的mysql不像php里的那样会在完成查询后断开,只要不主动断开,连接一 ...

  8. MYSQL连接相关参数和状态值详解

    针对mysql的连接参数和状态值,本文做些介绍和对比 一.MYSQL连接参数变量 1.常用连接数限制参数 show variables like '%connect%'; | max_connect_ ...

  9. Mysql 连接池

    数据库连接池的作用: 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接 ...

随机推荐

  1. ERA-Interim数据学习

    1.气象再分析数据有很多种,看文献里用到的主要有这几种 ECWRF——ERA-Interim,分辨率0.125°,欧洲的 MERRA-2,分辨率0.625°*0.5°,NASA的 GEOS-5FP,分 ...

  2. Linux expect详解

    随处可见的expect第一次见expect这个命令还是我第一次参加全量上线的时候,那是公司的一个牛人用Shell脚本写的一套自动部署.MD5 比对.发布的全量上线工具,没事的时候,看了下其中的几个脚本 ...

  3. 浅谈UDF并行

    首先我们来看说明UDF并行流程的这个图 网格和求解数据分布和储存在计算节点(compute-node)处理器上,而对于GUI界面和主机(host)节点上不存储任何数据,主机节点将命令从GUI传递到0节 ...

  4. 冰多多团队alpha阶段发布说明

    标题:冰多多Alpha阶段发布说明 Alpha版本功能介绍 我们项目当前是两个部分,前端编辑器和后端mtermux是分开的,是两个独立的app项目,还没有完美的连起来(我们alpha阶段目标任务是不必 ...

  5. T-MAX——团队展示

    第一次团队博客:百战黄沙穿金甲 基础介绍 这个作业属于哪个课程 2019秋福大软件工程实践Z班 这个作业要求在哪里 团队作业第一次-团队展示 团队名称 T-MAX 这个作业的目标 展现团队成员的风采, ...

  6. mybatis自定义之优先从classes目录加载,加载之后遇到相同的类定义时不再加载

    如果mybatis中包含了两个相同定义的mapper,启动时出现下列异常: Caused by: java.lang.IllegalArgumentException: Result Maps col ...

  7. Kafka安装教程(详细过程)

    安装前期准备: 1,准备三个节点(根据自己需求决定) 2,三个节点上安装好zookeeper(也可以使用kafka自带的zookeeper) 3,关闭防火墙 chkconfig  iptables o ...

  8. Go 汇编入门

    https://golang.org/doc/asm https://github.com/teh-cmc/go-internals/tree/master/chapter1_assembly_pri ...

  9. idea 出现 bootstrap.properties 中的内容不能识别

    错误截图如下 依赖库引用问题 第一种: <dependency> <groupId>org.springframework.cloud</groupId> < ...

  10. LwIP应用开发笔记之七:LwIP无操作系统HTTP服务器

    前面我们实现了TCP服务器和客户端的简单应用,接下来我们实现一个基于TCP协议的应用协议,那就是HTTP超文本传输协议 1.  HTTP协议简介   超文本传输协议(Hyper Text Transf ...