【 TiDB 使用环境】生产环境
【 TiDB 版本】v6.5.0
【遇到的问题:问题现象及影响】
在 tidb 节点没有其它链接的情况下,使用 jdbc 连接数据库,有概率在握手时卡住0-30秒不等,但最终都可以连接上。
大概说一下场景,我们使用 kettle jdbc 直连 tidb,没有使用连接池,所以其实每次都会创建新连接。同时老版本 kettle 配不了 connectTimeout,导致在上述问题出现的时候,jdbc 就会报 communication link failure。这个问题之前偶尔出现过但不频繁,并且是在被 spark 并发创建大量连接时才会出现,可发现问题表现是即使没有负载也会有这个情况。
出现某一次连接慢的时候 tidb 本身没有输出什么日志,监控上面有问题的节点和其它正常的节点也没什么区别,所以因为这个我一度怀疑是负载均衡配的有问题,但后来通过直连每个节点发现了有问题的 tidb。
后来我抓包看了下,发现慢的时候是卡在 tcp 握手成功之后和 tidb 协商验证方式之前,这俩正常情况下几乎没有延迟
但慢的时候就很慢,会隔很长的时间,甚至多了tcp keepalive,不过也说明连接本身应该没问题
修改:似乎也不全是卡在同一个地方,比如这个就是卡在密码认证之后和返回认证成功之前
不知道有没有遇到过这个问题的佬