java mysql sleep问题_Java 操作 MySQL 的时候,为什么瞬间会产生大量的 sleep 的连接。...

持久化用的 Hibernate,连接池用的 Hikari,连接池大小设置为 800 。场景是使用 csv 批量导入上万条记录,每条记录不是简单的保存到数据库,可能会涉及到多次数据库查询或者更新操作。

在这种前提之下,当我将这些动作都放到一个事务中去处理的时候,后台会报如下的错误:

Caused by: java.sql.SQLTransientConnectionException: HikariPool-3 - Connection is not available, request timed out after 20001ms.

21:37:18,591 ERROR [stderr] (default task-3) at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695)

21:37:18,591 ERROR [stderr] (default task-3) at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197)

21:37:18,591 ERROR [stderr] (default task-3) at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162)

21:37:18,591 ERROR [stderr] (default task-3) at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:100)

21:37:18,592 ERROR [stderr] (default task-3) at org.hibernate.hikaricp.internal.HikariCPConnectionProvider.getConnection(HikariCPConnectionProvider.java:77)

21:37:18,592 ERROR [stderr] (default task-3) at org.hibernate.engine.jdbc.connections.spi.AbstractMultiTenantConnectionProvider.getConnection(AbstractMultiTenantConnectionProvider.java:36)

使用 show processlist 观察 mysql 连接的时候,某个瞬间会产生大量的 sleep 连接。

现在我的疑问是,sleep 连接是怎么才会产生的? 如果我仅仅只是在循环中执行一万次数据库查询操作,MySQL 连接没有什么波动,而当我在使用事务执行某个耗时任务时(这个任务中会执行查询数据库的操作),就会产生大量的 sleep 连接?

谁能帮忙解释一下?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值