【 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-ttl 、 wait_timeout、 interactive_timeout、 max_execution_time 参数都是默认值,肯定比10s长。
【排除haproxy的问题】
跳过haproxy,直接连接tidb实例,也是一样的问题。
有没有大佬碰到过一样的问题?