【OceanBase诊断调优】—— 如何排查 server 断连接问题

本文介绍如何排查 server 断连接问题。

断开连接的常见原因

  • 协议层异常 发送报文时遇到发生一些非预期的错误,server 将会发生主动断开连接。

  • 事务异常 包括 rollback 失败或 commit 失败。

  • Query 异常 已输出行数据,但 server 内部发生错误。

  • Processor 发生异常 获取 processor 为空。

  • 处理 processor 发生异常。初始化变量时发生异常。

  • session is killed。

    • 删除租户 比如在删除租户后,如果 proxy 错误地路由请求到本机,导致 query 发现 session is killed,导致断连接。

    • 杀事务。

    • 主动 kill session。

断开连接的排查步骤

  1. 使用断开连接的 conn id 找到客户端(OBProxy、Connector/JDBC、OBCI)连接到服务器的 sess_id(也可能称为 thread_id)。

  2. 在服务器日志中使用 sess_id 搜索与断开连接相关的 observer 日志信息。

    grep "kill and revert session" observer.log* | grep <sess_id>
    
  3. 使用日志中的 trace_id 搜索 observer 日志,找到报告错误代码 -5066 的开始位置,以确定断开连接的原因。

    grep <trace_id> observer.log*
    
  4. 如果原因为上述异常情况,保存日志信息、环境信息和 trace_id 并联系 OceanBase 技术支持协助处理。

如何查找 conn_id

当 Query 异常时通常会报出 -5066 错误码,在 observer 日志中可以根据 trace_id 来查找。

日志信息如下。

observer.log.20230705172820016:[2023-07-05 17:26:35.988048] WDIAG [SQL] stmt_query (ob_sql.cpp:210) [61238][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=9][errcode=-5066] fail to handle text query(stmt=INSERT INTO test VALUES (SLEEP(1)), ret=-5066)

这里表示 session interrupt。随后搜索 connection close 来找到 sessid,如以下示例日志中的信息。

observer.log.20230705172820016:[2023-07-05 17:26:36.091289] INFO [RPC.OBMYSQL] destroy (obsm_conn_callback.cpp:223) [52261][sql_nio1][T0][Y0-0000000000000000-0-0] [lt=27] connection close(sessid=3221585899, ...)

在这个示例中,3221585899 即为 conn id 值。

适用版本

OceanBase 数据库所有版本。

附录

OceanBase 敏捷诊断工具(OceanBase Diagnostic Tool, 简称obdiag) 是一款源代码开源敏捷黑屏诊断工具,可以对OceanBase集群进行一键集群巡检、一键分析、一键根因分析以及一键诊断信息收集。

相关推荐
云和恩墨29 分钟前
云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?
数据库·人工智能·云计算·dba
明月看潮生1 小时前
青少年编程与数学 02-007 PostgreSQL数据库应用 11课题、视图的操作
数据库·青少年编程·postgresql·编程与数学
阿猿收手吧!1 小时前
【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}
数据库·redis·缓存
奈葵1 小时前
Spring Boot/MVC
java·数据库·spring boot
leegong231111 小时前
Oracle、PostgreSQL该学哪一个?
数据库·postgresql·oracle
中东大鹅1 小时前
MongoDB基本操作
数据库·分布式·mongodb·hbase
夜光小兔纸2 小时前
Oracle 普通用户连接hang住处理方法
运维·数据库·oracle
兩尛3 小时前
订单状态定时处理、来单提醒和客户催单(day10)
java·前端·数据库
web2u3 小时前
MySQL 中如何进行 SQL 调优?
java·数据库·后端·sql·mysql·缓存
Elastic 中国社区官方博客4 小时前
使用 Elasticsearch 导航检索增强生成图表
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索