排查 ODP 路由问题
本小节将介绍路由诊断功能被开发的原因、如何使用路由诊断功能,以及如何根据诊断信息查找和解决问题。
ODP 是 OceanBase 数据库的接入层和路由层,而路由是 ODP 的核心功能,目前使用过程中发现,路由过程出现问题的情况下排查问题较为困难,因此 ODP V4.2.1 迭代中开发了路由诊断功能,通过在 ODP 路由转发的关键过程中设置诊断点来记录关键状态信息,这些诊断点可以被输出到日志或以结果集方式返回。
通过分析输出的诊断点,可以清晰地了解一条 SQL 语句从进入 ODP 到被转发出去的过程中发生了什么。
路由诊断流程
使用路由诊断功能排查问题的流程如下。
-
获取诊断信息,详细介绍可参见 “获取诊断信息” 部分。
-
根据诊断信息排查问题,详细介绍可参见 “诊断点排查” 部分。
获取诊断信息
本文介绍两种获取诊断信息的方法,可通过如下任一方法获取诊断信息。
命令行语句
可通过 explain route <your_sql>;
命令获取 SQL 语句的路由状态信息,在配置项 route_diagnosis_level
不为 0 的情况下,该命令会展示详细的诊断信息。<your_sql>
语句将会在 ODP 内部进行处理,执行正常的 ODP 转发流程,但不会真正转发给 OBServer 节点。
配置项 route_diagnosis_level
是全局配置项,可用来控制输出路由状态信息的详细程度。该配置项取值为一个整数,默认值为 2,表示输出信息可以覆盖二级诊断点。
route_diagnosis_level
配置项的可选值有 [0-4],配置的值越大,展示的状态信息越详细。配置值为 0 时表示关闭该模块。关闭该模块时,不会占用 ODP 内存,也不会影响 ODP 性能。
explain route 命令不支持诊断如下命令字。
-
COM_STMT_PREPARE
-
COM_STMT_PREPARE_EXECUTE
-
COM_STMT_CLOSE
-
COM_STMT_RESET
-
文本 Prepare(语法:
PREPARE statement_name FROM preparable_SQL_statement;
) -
文本 Prepare drop(语法:
{DEALLOCATE | DROP} PREPARE stmt_name;
) -
ODP 内部命令