问题描述
OceanBase 集群偶发性出现如下告警信息:
[2021-10-27 21:25:21.747606] ERROR [SERVER] force_disconnect (obmp_base.cpp:961) [79836][2176][YB420C018017-0005CCBD482C7EF4] [lt=13] [dc=0] force disconnect by server BACKTRACE:0xd1c809a 0x34569b2 0xd0ed9c2 0x34b10b9 0x98da499 0x98e6971 0x31dd94f 0x31d7e72 0x31d574e 0x31d0046 0x
影响版本
OceanBase 数据库 V2.2.77 版本。
问题原因
- 当客户端发起一个请求后且在 OBServer 还未处理结束该请求前断开了连接,OBServer 会抛出该告警。
- 某些 SQL 执行期间触发了disconnect 逻辑,此类 SQL 一般是解析异常的不合理 SQL。
下面以一个列子说明触发该问题的逻辑: 假设一个请求从 client 发给 OBServer:
- 先建立了 TCP 连接,client 和 server 通过握手完成登录鉴权, 然后 client 发送一个请求给 OBServer。
- OBServer 在处理请求过程中客户端主动断开连接,OBServer 检查到连接异常,就会主动调用 force_disconnect。
解决方法
- 建议您可以尝试通过抓包等手段排查为何客户端发起请求后关闭连接。
- 检查和改写 SQL。