首批通过分布式安全可靠测评,为关键业务系统打造
诊断点排查概述
更新时间:2026-04-14 17:41:09
诊断点描述的是 ODP 进行路由转发过程中的关键过程,通过观察诊断点,可以洞悉路由转发过程。本章节介绍如何根据诊断点进行分析排查。
排查流程
获取诊断信息后,您可根据路由请求是否处于事务中选择下述不同的操作进行排查。
请求处于事务中
处于事务中的请求路由不准有以下两种处理情况。
分布式事务路由
当前请求 ODP 路由不准,直接参照诊断流程进行诊断点的分析排查。
当前请求跟随协调者路由,可将【Trans First Query】中的内容取出,使用
explain route命令重新执行一遍后再参照诊断流程进行诊断点的分析排查。
非分布式事务路由
当前请求跟随事务第一条语句路由,将【Trans First Query】中的内容取出,使用
explain route命令重新执行一遍后再参照诊断流程进行诊断点的分析排查。
请求不处于事务中
当路由不准的请求不处于事务中时,您可直接参照诊断流程进行诊断点的分析排查。
诊断流程
当您通过 explain route 命令或诊断日志获取到诊断信息后,您可通过各诊断点信息进行路由诊断,各诊断点需诊断的变量及变量含义可参考本章具体的诊断点介绍文档。
下表为诊断点的概览,诊断点从上到下为其执行顺序,诊断级别越高,获取的诊断信息越详细。
说明
诊断点数据不会全部输出到日志或者结果集中,诊断点只会输出对应当前诊断有用的数据。
TABLE_ENTRY_LOOKUP_START和PARTITION_ID_CALC_START为无数据诊断点,仅用于维持诊断点之间的树状结构
| 诊断阶段 | 诊断点 | 诊断点级别 |
|---|---|---|
| 文法解析 | SQL_PARSE | 1 |
| 获取路由信息 | ROUTE_INFO | 1 |
| 获取表副本位置 | LOCATION_CACHE_LOOKUP | 1 |
| ROUTINE_ENTRY_LOOKUP_DONE | 2 | |
| TABLE_ENTRY_LOOKUP_START | 2 | |
| FETCH_TABLE_RELATED_DATA | 3 | |
| TABLE_ENTRY_LOOKUP_DONE | 2 | |
| PARTITION_ID_CALC_START | 2 | |
| EXPR_PARSE | 3 | |
| CALC_ROWID | 3 | |
| RESOLVE_EXPR | 3 | |
| RESOLVE_TOKEN | 4 | |
| CALC_PARTITION_ID | 3 | |
| PARTITION_ID_CALC_DONE | 2 | |
| PARTITION_ENTRY_LOOKUP_DONE | 2 | |
| 根据路由策略选取 | ROUTE_POLICY | 1 |
| 副本访问控制 | CONGESTION_CONTROL | 1 |
| 处理 OBServer 回包 | HANDLE_RESPONSE | 1 |
| 选取副本并尝试重试 | RETRY | 1 |
诊断技巧
可重点关注诊断提示(Route Prompts)中的 WARN 提示信息,以及其对应诊断点附近的诊断数据。
可重点关注诊断数据(Route Plan)中的 error 数据。
可通过设置 route_diagnosis_level = 4 以及 monitor_log_level='TRACE',在诊断日志中查看所有可用日志诊断的用户请求的诊断结果。
route_diagnosis_level 的详细介绍请参见 route_diagnosis_level;monitor_log_level 的详细介绍请参见 monitor_log_level。