Sql执行超过10秒,客户端主动断开连接

【 TiDB 使用环境】测试
【 TiDB 版本】V6.1.3
【遇到的问题:问题现象及影响】

mysql驱动版本:8.0.31

执行1条比较耗时的sql,超过10秒后,客户端主动断开连接。

sql:

insert into TableX (a,b,c,d,..) (   SELECT a,b,c,d,..    from TablxY  where ...)

客户端报错:

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet successfully received from the server was 10,016 milliseconds ago. The last packet sent successfully to the server was 10,017 milliseconds ago.
	at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)

jdbc连接串:

url: jdbc:mysql://11.139.35.194:4000/busiData?tcpKeepalive=true&autoReconnect=true&useServerPrepStmts=true&cachePrepStmts=true&prepStmtCacheSize=1000&prepStmtCacheSqlLimit=2147483647&rewriteBatchedStatements=true&useConfigs=maxPerformance&allowMultiQueries=true&useSSL=false

【排查过程】
看过官网文档
连接池与连接参数 | PingCAP Docs

和我碰到的情况不太一样,不是连接探活配置的问题。
我在测试的时候只执行这1条sql,只用了1个数据库连接,而且sql在服务端执行成功了,数据插入成功了,TIDB也没有报错,只找到了连接被关闭的提示。
判断应该是客户端超过10s没收到响应,主动关闭了数据库连接。
看了MySQL的文档
MySQL :: MySQL Connector/J 8.0 Developer Guide :: 15 Troubleshooting Connector/J Applications
第15.8条,连接串增加了tcpKeepalive=true也没有用,其实这个值默认就是true。

TIDB的max-txn-ttlwait_timeoutinteractive_timeoutmax_execution_time 参数都是默认值,肯定比10s长。

【排除haproxy的问题】
跳过haproxy,直接连接tidb实例,也是一样的问题。

有没有大佬碰到过一样的问题?

看看应用端有没有配置一些超时的参数。连接池也有一些默认的参数 可以看看下面的链接

换个官方推荐的mysql connector版本试试

目前 TiDB 兼容的版本是 5.7 和 8.0 还有挺多不兼容的地方
参考:https://docs.pingcap.com/zh/tidb/stable/mysql-compatibility#与-mysql-兼容性对比

TiDB 高度兼容 MySQL 5.7 协议、MySQL 5.7 常用的功能及语法。
可以使用 MySQL 5.7 进行测试一下~

mysql 驱动改为5.1.49后执行正常了

连接串中connectTimeoutsocketTimeout没有设置,设置了反而不正常。。。

1 个赞

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。