应用写TIDB偶发出错,TIDB日志上信息read packet failed, close this connection

【 TiDB 使用环境】生产环境
【 TiDB 版本】5.1.4
【复现路径】
【遇到的问题:问题现象及影响】
近期研发说应用写TIDB偶发出错, TIDB日志上信息read packet failed, close this connection。

  1. T IDB集群稳定,负载较低

  2. TIDB日志 有记录read packet failed, close this connection

  3. 业务日志

请问:
可能原因是否是TIDB参数或应用链接参数要优化?

【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面

1. 应用链接:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://smsxxx:4000/smsdb?useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true&useServerPrepStmts=true&allowMultiQueries=true
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.maxActive=20
spring.datasource.dbcp2.max-open-prepared-statements=20
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false

2. TIDB参数

spring.datasource.testOnBorrow改为true,这样每次拿连接的时候就会检测,缺点是连接池的性能会变低,这个方法多半可以解决你的问题。
其他办法,可能不一定有用,也得看你连接池的版本
wait_timeout可以调整为interactive_timeout一致
连接池配置一下validationQuery,配个探活命令 select 1

1 个赞

这个问题最后是否解决了?解决的话分享下最终的解决方法?