首批通过分布式安全可靠测评,为关键业务系统打造
生成 ASH 报告
更新时间:2026-04-10 11:58:35
您可以通过调用 ASH PL 包生成对应的 ASH 报告。
SQL 语法
ASH PL 包的信息有如下几个字段组成:
obclient [oceanbase]> call dbms_workload_repository.ash_report(
'BTIME',
'ETIME',
'sql id',
'trace id',
'wait class');
obclient [SYS]> call dbms_workload_repository.ash_report(
BTIME => 'xxxx',
ETIME => 'xxxx',
SQL_ID => 'xxxx',
TRACE_ID => 'xxxx',
WAIT_CLASS => 'xxxx',
);
参数说明如下:
| 参数 | 说明 |
|---|---|
| BTIME | 采样开始时间。 |
| ETIME | 采样结束时间。 |
| SQL_ID | 待采样 SQL 的 SQL_ID,不填或填 NULL 则表示不限制 SQL_ID。 |
| TRACE_ID | 待采样 SQL 的 TRACE_ID,不填或填 NULL 则表示不限制 TRACE_ID。 |
| WAIT_CLASS | 待采样的事件类型。WAIT_CLASS 取值参考 GV$ACTIVE_SESSION_HISTORY.WAIT_CLASS 字段的取值,不填或填 NULL 则表示不限制等待类型。 |
| REPORT_TYPE | 报告类型,目前仅支持 TEXT 类型,可不填写。 |
该包中相关信息是通过查询 GV$ACTIVE_SESSION_HISTORY 视图获取。GV$ACTIVE_SESSION_HISTORY 视图提供了会话活动信息。任何一个连接到数据库且排队等待的会话都会被考虑是一个活动的会话,每个会话采样都是通过 GV$ACTIVE_SESSION_HISTORY 视图返回的一组行数据,在会话采样期间的每个会话会在视图中被显示。有关视图更多信息,请参见 GV$ACTIVE_SESSION_HISTORY(MySQL 模式) 和 GV$ACTIVE_SESSION_HISTORY(Oracle 模式)。
操作步骤
以 Oracle 模式为例,生成 ASH 报告的步骤如下。
使用
SYS用户登录到集群的 oracle 租户,进入 OceanBase 数据库。$ obclient -h172.30.xxx.xxx -Pxxxx -usys@oracle -pxxxx -A obclient [SYS]>调用
set serveroutput on;将输出内容打印出来。obclient [SYS]> set serveroutput on;调用 ASH PL 包,输入需要诊断的开始时间和结束时间后生成报告内容。
将报告信息直接在界面上显示。
obclient [SYS]>call dbms_workload_repository.ash_report( --采样开始时间 to_date('2023-02-22 19:26:47', 'yyyy-MM-dd HH24:mi:ss'), --采样结束时间 to_date('2023-02-22 19:27:07', 'yyyy-MM-dd HH24:mi:ss'), -- 选取编号为 15B18561C66FCF844D00386749C0DA49 的 SQL 语句进行采样 sql_id=>'15B18561C66FCF844D00386749C0DA49'); -- TRACE_ID 和 WAIT_CLASS 的设置方式与 SQL_ID 类似,例如 trace_id = 'xxxxxx'; Query OK, 0 rows affected (29.49 sec)说明
- BTIME 和 ETIME 字段的值必须要设置。
- REPORT_TYPE 字段仅支持设置 text 类型。
- SQL_ID 、TRACE_ID 和 WAIT_CLASS 字段的值根据是否需要来设置。
将报告信息以 TXT 文件的形式显示。
生成脚本文件 report.sql。
vim report.sqlset serveroutput on; tee report.txt call dbms_workload_repository.ash_report( ##采样开始时间 to_date('2022-01-01 11:11:11', 'yyyy-MM-dd HH24:mi:ss'), ##采样结束时间 to_date('2022-11-10 12:18:36', 'yyyy-MM-dd HH24:mi:ss'), ## 选取编号为 15B18561C66FCF844D00386749C0DA49 的 SQL 语句进行采样 sql_id=>'15B18561C66FCF844D00386749C0DA49'); ##TRACE_ID 和 WAIT_CLASS 的设置方式与 SQL_ID 类似,例如 trace_id = 'xxxxxx'; notee登录数据库,执行 start report.sql,结果会打印到 report.txt 文件中了。
$ obclient -h172.30.xxx.xxx -P2881 -usys@oracle -pxxxx -A obclient [SYS]> source report.sql;