基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
使用 SQL Diagnoser
更新时间:2023-08-03 17:20:32
本文为您介绍 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 格式。
注意
- 诊断规则和诊断结果中关于时间的属性都未做单位处理,实际与 v/gv$sql_audit 中的原始单位一致。比如 elapsed_time 单位为 us,CPU 时间由
execution_time + get_plan_time - total_wait_time_micro计算而来,单位同样为 us。- SQL Diagnoser 第一次启动时,会在当前用户主目录下创建文件夹
h2及其相关数据文件,若删除这些文件,诊断规则会重置。若想持久化对诊断规则的修改,请不要移动、修改或删除这些文件。- 诊断默认过滤掉 OceanBase 数据库(OB 部署后默认创建名为 oceanBase 的数据库),请不要在该数据库下测试本工具功能。
- 为降低诊断对系统租户的压力及降低工具本身的负载,每次诊断最多从
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 除 内置诊断项 外,还内置了一个 H2 数据库,您可在数据库中调整或者自定义诊断项规则。
通过 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,无需输入密码,直接登录即可。连接 Web Console 后,找到
diagnose_rule表,可以看到该表内置的诊断项规则。您可对诊断项规则进行修改。诊断项规则各字段描述如下。
列名 描述 NAME 诊断规则名。 EXPRESSION 诊断规则表达式,该表达式需要返回布尔值,具体语法详见 诊断规则表达式 。 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 表示开启。 查看诊断上下文。 每条 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 的运行。
- 执行
ps -ef | grep sql-diagnoser查看 SQL Diagnoser 进程号。 - 执行
kill -9 进程号关闭进程。