---
title: "使用 SQL Diagnoser | OceanBase 文档中心"
description: 使用 SQL Diagnoser 本文为您介绍 SQL Diagnoser 的使用方法。包括一键诊断、调整诊断规则、关闭 SQL Diagnoser 等操作。 一键诊断 您可在 SQL Diagnoser 首页通过 一键诊断 功能对 SQL 进行快速诊断。该功能具体字段说明如下。 输入框 描述 是否必填 Ip add…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.1.4 社区版

# 使用 SQL Diagnoser

更新时间：2023-08-03 17:20:32

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V3.1.4/zh-CN/1800.supporting-tools/900.sql_diagnoser/200.deploy-and-use-delsql_diagnoser/200.sql_diagnoser-development-guide.md)  

本文为您介绍 SQL Diagnoser 的使用方法。包括一键诊断、调整诊断规则、关闭 SQL Diagnoser 等操作。

## 一键诊断

您可在 SQL Diagnoser 首页通过 **一键诊断** 功能对 SQL 进行快速诊断。该功能具体字段说明如下。

| 输入框 | 描述 | 是否必填 |
| --- | --- | --- |
| Ip address | IP 地址。 | 是 |
| Port | 端口。 | 是 |
| 系统租户密码 | 系统租户的密码。 | 是 |
| 集群名 | 如果是通过 OBProxy 连接的集群，则必须填写，否则将无法连接集群。 | 否 |
| 开始时间 | 表示获取从该时间点开始的 SQL 执行记录诊断。 | 是 |
| 结束时间 | 表示获取截至到该时间点的 SQL 执行记录诊断。若诊断速度较慢，建议缩小查询范围后重试。 | 是 |
| 租户名 | 表示需要诊断的租户。若不填，则诊断所有租户。   支持配置多个租户，租户名之间使用英文逗号分隔，如：tenant1、tenant2。 | 否 |
| 响应时间 | 响应时间阈值，表示响应时间超过该值的 SQL 执行记录才会被诊断，单位为 us，默认值为 10000 us。当诊断接口过慢时，可以调高该阈值。 | 否 |

### 快捷填充功能

复制连接串后，进入 SQL Diagnoser 首页进行粘贴，SQL Diagnoser 会解析复制的内容并填充进相应的输入框，支持 `mysql -h$ip -P$port -u$user -p$password` 格式。

> **注意**
>
>  
>
> 1. 诊断规则和诊断结果中关于时间的属性都未做单位处理，实际与 v/gv$sql_audit 中的原始单位一致。比如 elapsed_time 单位为 us，CPU 时间由 `execution_time + get_plan_time - total_wait_time_micro` 计算而来，单位同样为 us。
>  2. SQL Diagnoser 第一次启动时，会在当前用户主目录下创建文件夹 `h2` 及其相关数据文件，若删除这些文件，诊断规则会重置。若想持久化对诊断规则的修改，请不要移动、修改或删除这些文件。
>  3. 诊断默认过滤掉 OceanBase 数据库（OB 部署后默认创建名为 oceanBase 的数据库），请不要在该数据库下测试本工具功能。
>  4. 为降低诊断对系统租户的压力及降低工具本身的负载，每次诊断最多从 `gv$sql_audit` 中提取 10000 条数据（按响应时间倒序），因此不能进行全量诊断。若想调整诊断数据量，建议以接口调用的方式指定最大返回行数 `queryLimit`； 或者在启动本工具时，设置环境变量 `sql.diagnose.sql.query-sql-audit-limit`，如 `nohup java -Dsql.diagnose.sql.query-sql-audit-limit=12345 -Dserver.port=9090 -jar sql-diagnoser-1.0.0.jar &`。

## 自定义诊断项规则

SQL Diagnoser 除 [内置诊断项](https://www.oceanbase.com/docs/community-observer-cn-10000000000449560) 外，还内置了一个 H2 数据库，您可在数据库中调整或者自定义诊断项规则。

1. 通过 Web Console 连接该数据库，数据库地址为 `http://ip:port/h2-console` 。 如 SQL Diagnoser 的部署地址为 `http://10.10.0.1:8080` ，则内置数据库的地址为 `http://10.10.0.1:8080/h2-console` 。

   > **注意**
   >
   >  
   >
   > 登录界面除默认值外，JDBC URL为`jdbc:h2:mem:e2ad8a5e-5f26-496c-9cfe-b528aa79****`，用户名为 `sa` ，无需输入密码，直接登录即可。
 2. 连接 Web Console 后，找到 `diagnose_rule` 表，可以看到该表内置的诊断项规则。您可对诊断项规则进行修改。

   诊断项规则各字段描述如下。

   | 列名 | 描述 |
   | --- | --- |
   | NAME | 诊断规则名。 |
   | EXPRESSION | 诊断规则表达式，该表达式需要返回布尔值，具体语法详见 [诊断规则表达式](https://www.oceanbase.com/docs/community-observer-cn-10000000000449561) 。 |
   | TYPE | 诊断规则类型，目前仅支持 **SINGLE**，表示诊断对象是一条 sql_audit 记录。 |
   | WINDOW_SIZE | 暂未用到。 |
   | CONTEXT_VALUES | 诊断后返回结果中封装的 **属性名-表达式** 键值对，表示关注的诊断上下文属性，及用户接口调用者提取关注的属性值。   如 CONTEXT_VALUES 为 `{"cpuTime":"$executeTime + $getPlanTime - $totalWaitTimeMicro"}`， 返回结果的 `contextValues` 属性为 `{"cpuTime":100}`。 |
   | TEMPLATE | 诊断结果描述模板，程序会将模板中的表达式转化成对应的值。   如 "CPU 时间为：`{$executeTime + $getPlanTime - $totalWaitTimeMicro}`" 被转换为 "CPU 时间为： 100"。 |
   | DESCRIPTION | 诊断项描述。 |
   | ENABLED | 是否开启该诊断项，0 表示关闭， 1 表示开启。 |
 3. 查看诊断上下文。 每条 SQL 的执行计划，会被封装为一个诊断上下文，其具有的属性可以参考 **诊断上下文**（大部分属性与 `gv$sql_audit` 对应，您可以单击 **Example Value** 旁的 **Schema** 查看属性描述）。 诊断上下文地址为 `http://ip:port/swagger-ui/index.html#/test-controller/diagnoseContextUsingGET`，其中 `ip:port` 为 SQL Diagnoser 的部署地址。

## 关闭 SQL Diagnoser

您可通过关闭 SQL Diagnoser 的进程来停止 SQL Diagnoser 的运行。

1. 执行 `ps -ef | grep sql-diagnoser` 查看 SQL Diagnoser 进程号。
 2. 执行 `kill -9 进程号` 关闭进程。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
