首批通过分布式安全可靠测评,为关键业务系统打造
使用 sql_diagnoser
更新时间:2026-04-07 20:57:20
本文为您介绍 sql_diagnoser 的使用方法。包括租户 SQL 诊断、SQL Review、关闭 sql_diagnoser 等操作。
租户 SQL 诊断
您可在 sql_diagnoser 首页通过 租户SQL诊断 功能直接分析业务集群的运行过的 SQL,找出常见的可疑 SQL,从而帮助用户找到隐藏性能问题,给出优化建议。该功能具体填充字段说明如下。
| 输入框 | 描述 | 是否必填 |
|---|---|---|
| Ip Address | IP 地址。 | 是 |
| Port | 端口。 | 是 |
| 用户名 | 租户的用户名 | 是 |
| 租户密码 | 租户登录密码。 | 是 |
| 集群名 | 如果是通过 OBProxy 连接的集群,则必须填写,否则将无法连接集群。 | 否 |
| 开始时间 | 表示获取从该时间点开始的 SQL 执行记录诊断。 | 是 |
| 采样数 | 表示从 sql_audit 视图中查询的记录条数,默认值10000 | 否 |
| 结束时间 | 表示获取截至到该时间点的 SQL 执行记录诊断。若诊断速度较慢,建议缩小查询范围后重试。 | 是 |
| 响应时间 | 响应时间阈值,表示响应时间超过该值的 SQL 执行记录才会被诊断,单位为 us,默认值为 20000 us。当诊断接口过慢时,可以调高该阈值。 | 否 |
注意
- 诊断规则和诊断结果中关于时间的属性都未做单位处理,实际与
gv$ob_sql_audit(OceanBase 数据库 V4.0 及以前版本gv$sql_audit)中的原始单位一致。比如elapsed_time单位为 us,CPU 时间由execution_time + get_plan_time - total_wait_time_micro计算而来,单位同样为 us。 - sql_diagnoser 第一次启动时,会在当前用户主目录下创建文件夹
h2及其相关数据文件,若删除这些文件,诊断规则会重置。若想持久化对诊断规则的修改,请不要移动、修改或删除这些文件。 - 诊断默认过滤掉 OceanBase 数据库(OceanBase 数据库部署后默认创建名为 oceanbase 的数据库),请不要在该数据库下测试本工具功能。
- 为降低诊断对系统租户的压力及降低工具本身的负载,每次诊断最多从
gv$ob_sql_audit(OceanBase 数据库 V4.0 及以前版本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-4.2.0.0.jar &。
SQL Review
SQL Review 功能可以通过简洁的白屏操作,用户在白屏输入想要 Review 的 SQL 文本,工具根据常见的规则项帮助用户分析 SQL 语句是否合理,并给出改进建议。字段填写说明如下:
| 输入框 | 描述 | 是否必填 |
|---|---|---|
| 连接地址 | IP 地址。 | 是 |
| Port | 端口。 | 是 |
| 用户名 | 租户的用户名 | 是 |
| 租户密码 | 租户登录密码。 | 是 |
| SQL文本框 | 输入你想要检查的SQL | 是 |
SQL 文本框里边输入的 SQL 进行检测是通过静态规则以及连接 OceanBase 数据库去查询一些内部视图来完成的,所以需要输入 OceanBase 数据库的连接信息(包括实际的要检测的数据库),检查过程中并不会去实际执行该文本框的 SQL,所以可放心使用 SQL Review 功能。
关闭 sql_diagnoser
您可通过关闭 sql_diagnoser 的进程来停止 sql_diagnoser 的运行。
- 执行
ps -ef | grep sql-diagnoser查看 sql_diagnoser 进程号。 - 执行
kill -9 进程号关闭进程。