注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:



DM的学习心得和知识总结(三)|DM数据库DBMS_WORKLOAD_REPOSITORY 包及其性能分析工具AWR-LMLPHP


文章快速说明索引

学习目标:

目的:前面我们分享过Oracle的RAT的相关实操,接下来看一下DM数据库DBMS_WORKLOAD_REPOSITORY 包及其性能分析工具AWR


学习内容:(详见目录)

1、DM数据库DBMS_WORKLOAD_REPOSITORY 包及其性能分析工具AWR


学习时间:

2023年04月10日 20:24:22


学习产出:

1、DM数据库动态性能视图
2、CSDN 技术博客 1篇


注:下面我们所有的学习环境是Centos7+DM V8

[dm8@dbserver bin]$ disql SYSDBA/SYSDBA

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 3.207(ms)
disql V8
SQL> select * from v$version;

行号     BANNER                   
---------- -------------------------
1          DM Database Server 64 V8 
2          DB Version: 0x7000b

已用时间: 1.787(毫秒). 执行号:4.
SQL>
SQL> select id_code;

行号     ID_CODE                     
---------- ----------------------------
1          1-1-126-20.09.04-126608-ENT 

已用时间: 0.435(毫秒). 执行号:22.
SQL>


工作集负载存储库

数据库快照是一个只读的静态的数据库。DM 快照功能是基于数据库实现的,每个快照是基于数据库的只读镜像。通过检索快照,可以获取源数据库在快照创建时间点的相关数据信息。

为了方便管理自动工作集负载信息库 AWR(Automatic Workload Repository)的信息,系统为其所有重要统计信息和负载信息执行一次快照,并将这些快照存储在 AWR 中。

用户在使用 DBMS_WORKLOAD_REPOSITORY 包之前,需要提前调用系统过程 SP_INIT_AWR_SYS(1)创建包,包创建成功后就可以使用空间数据类型以及包提供的方法。DM 数据库在创建该包时,默认创建一个名为 SYSAUX 的表空间,对应的数据文件为 SYSAWR.DBF,该表空间用于存储该包生成快照的数据。如果该包被删除,那么 SYSAUX 表空间也对应地被删除。

AWR 功能默认是关闭的,如果需要开启,则调用 DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL 过程设置快照的间隔时间。DBMS_WORKLOAD_REPOSITORY 包还负责 snapshot(快照)的管理。

SQL> SELECT SF_CHECK_AWR_SYS();

行号     SF_CHECK_AWR_SYS()
---------- ------------------
1          0

已用时间: 0.402(毫秒). 执行号:15.
SQL> 

注:

  • 若创建数据库时页大小选择为 4K,不支持 DBMS_WORKLOAD_REPOSITORY 包的相关方法
  • DM MPP 环境下不支持 DBMS_WORKLOAD_REPOSITORY 包

包的相关方法

AWR_CLEAR_HISTORY,清理之前的所有 snapshot 记录,其语法格式如下:

PROCEDURE AWR_CLEAR_HISTORY();

AWR_SET_INTERVAL,设置生成 snapshot 的时间间隔,其语法格式如下:

PROCEDURE AWR_SET_INTERVAL(
	AWR_INTERVAL	IN		INT		DEFAULT 60
);

参数解释如下:

AWR_INTERVAL

-- 时间间隔
-- 单位分钟,取值范围为 10~525600,缺省值为 60
-- 参数为 0 时,关闭快照(关闭时参数值为 57816000 分钟(110 年),是一个无效的值)

AWR_REPORT_HTML,生成 html 格式的报告,其语法格式如下:

FUNCTION AWR_REPORT_HTML(
	START_SNAP_ID	IN		INT,
	END_SNAP_ID		IN		INT
)RETURN AWRRPT_ROW_TYPE PIPELINED;

PROCEDURE  SYS.AWR_REPORT_HTML(
	START_ID	IN		INT, 
	END_ID		IN		INT, 
	DEST_DIR	IN		VARCHAR(128), 
	DEST_FILE	IN		VARCHAR(128)
);

第一种参数解释如下:

-- START_SNAP_ID 为起始 snapshot_id
-- End_snap_id 为终止 snapshot_id

-- 返回包含报告的全部 html 脚本信息的嵌套表类型 AWRRPT_ROW_TYPE
-- 把 awr 数据报表生成到指定路径的 html 文件

第二种参数解释如下:

-- Start_ID 为起始 snapshot_id
-- End_id 为终止 snapshot_id
-- DEST_DIR 为指定生成报告的目标路径
-- DEST_FILE 为指定生成报告的目标文件名,文件名需要以.htm 和.html 结尾

AWR_REPORT_TEXT,生成 text 格式的报告,其语法格式如下:

FUNCTION AWR_REPORT_TEXT(
	START_SNAP_ID	IN		INT,
	END_SNAP_ID		IN		INT
) RETURN AWRRPT_ROW_TYPE PIPELINED;

PROCEDURE  SYS.AWR_REPORT_TEXT(
	START_ID	IN		INT, 
	END_ID		IN		INT, 
	DEST_DIR	IN		VARCHAR(128), 
	DEST_FILE	IN		VARCHAR(128)
);

第一种参数解释如下:

-- START_SNAP_ID 为起始 snapshot_id
-- End_snap_id 为终止 snapshot_id

-- 返回值 返回包含报告的全部 text 脚本信息的嵌套表类型 AWRRPT_ROW_TYPE
-- 把 awr 数据报表生成到指定路径的 text 文件

第二种参数解释如下:

-- Start_ID 为起始 snapshot_id
-- End_id 为终止 snapshot_id
-- DEST_DIR 为指定生成报告的目标路径
-- DEST_FILE 为指定生成报告的目标文件名,文件名需要以.txt 结尾

CREATE_SNAPSHOT,创建一次快照 snapshot,其语法格式如下:

FUNCTION CREATE_SNAPSHOT(
	FLUSH_LEVEL		IN		VARCHAR2	DEFAULT 'TYPICAL'
) RETURN INT;

其参数解释如下:

FLUSH_LEVEL

-- 'TYPICAL' OR 'ALL'
-- 如果为空,则缺省为'TYPICAL',该值会影响快照生成数据的大小,如果是'ALL',则将全部历史数据保存
-- 如果是'TYPICAL'则会刷部分数据,具体在后续会涉及到

-- 返回值 返回创建的快照 ID 值

DROP_SNAPSHOT_RANGE,删除 SNAPSHOT,其语法格式如下:

PROCEDURE DROP_SNAPSHOT_RANGE(
	LOW_SNAP_ID		IN		INT,
	HIGH_SNAP_ID	IN		INT,
	DBID			IN		INT		DEFAULT NULL
);

其参数解释如下:

-- low_snap_idsnap_id 范围的起始值
-- high_snap_idsnap_id 范围的结束值
-- dbid 表示 snapshot 所在的 db 唯一标识,默认为 NULL,表示当前 db,目前该参数不起作用

MODIFY_SNAPSHOT_SETTINGS,设置 snapshot 的属性值,其语法格式如下:

PROCEDURE MODIFY_SNAPSHOT_SETTINGS(
	RETENTION		IN		INT		DEFAULT NULL,
	AWR_INTERVAL	IN		INT		DEFAULT NULL,
	TOPNSQL			IN		INT    	DEFAULT NULL,
	DBID			IN		INT    	DEFAULT NULL
);

PROCEDURE MODIFY_SNAPSHOT_SETTINGS(
	RETENTION    	IN  		INT    	DEFAULT NULL,
	AWR_INTERVAL 	IN  		INT    	DEFAULT NULL,
	TOPNSQL      	IN  		VARCHAR2,
	DBID         	IN  		INT    	DEFAULT NULL
);

其参数解释如下:

 -- RETENTION 表示 snapshot 在数据库中保留的时间,以分钟为单位,最小值为 1 天,最大值为 100 年;如果值为 0,则表示永久保留
 -- 如果值为 NULL,则表示本次设置的该值无效,保留以前的旧值


-- AWR_INTERVAL 表示每次生成 snapshot 的间隔时间,以分钟为单位,最小值为 10 分钟,最大值为 1 年
-- 如果值为 0,则 snapshot 会失效。如果值为 NULL,则表示本次设置的该值无效,保留以前的旧值


-- topnsql 如果为 NULL,则保留当前设置的值。
-- 如果为 INT 类型,则表示按照 sql 的衡量标准(执行时间,cpu 时间,消耗内存等)获取保存的 sql 个数,最小值为 30,最大值为 50000
-- 如果为 varchar2 类型,则可以设置如下 3 个值:DEFAULT、MAXIMUM 和 N。DEFAULT 对应值为 100;MAXIMUM 对应值为 50000;值 N 是数字串,但要求转化为 INT 类型之后,值必须在 30 至 50000 之间
-- 目前该参数不起作用


-- dbid 表示 snapshot 所在的 db 唯一标识,缺省为 NULL,表示当前 db。目前该参数不起作用

相关的系统表

DBMS_WORKLOAD_REPOSITORY 包相关的系统表包括快照信息管理表及快照信息表,这些系统表都只有创建了 DBMS_WORKLOAD_REPOSITORY 包后才能查看。

SQL> SELECT SF_CHECK_AWR_SYS();

行号     SF_CHECK_AWR_SYS()
---------- ------------------
1          0

已用时间: 0.238(毫秒). 执行号:23.
SQL> SP_INIT_AWR_SYS(1); ## 初始化AWR系统包,即:创建 DBMS_WORKLOAD_REPOSITORY 系统包
DMSQL 过程已成功完成
已用时间: 335.815(毫秒). 执行号:24.
SQL> 
SQL> SELECT SF_CHECK_AWR_SYS();

行号     SF_CHECK_AWR_SYS()
---------- ------------------
1          1

已用时间: 1.764(毫秒). 执行号:25.
SQL>
SQL> select file_name,tablespace_name from dba_data_files;

行号     FILE_NAME                                TABLESPACE_NAME
---------- ---------------------------------------- ---------------
1          /home/dm8/dmdbmsloc/data/DMDB/SYSTEM.DBF SYSTEM
2          /home/dm8/dmdbmsloc/data/DMDB/SYSAWR.DBF SYSAUX
3          /home/dm8/dmdbmsloc/data/DMDB/MAIN.DBF   MAIN
4          /home/dm8/dmdbmsloc/data/DMDB/TEMP.DBF   TEMP
5          /home/dm8/dmdbmsloc/data/DMDB/ROLL.DBF   ROLL

已用时间: 188.227(毫秒). 执行号:37.
SQL>

快照信息管理表

SQL> desc SYS.WRM$_WR_CONTROL;

行号     NAME          TYPE$                        NULLABLE
---------- ------------- ---------------------------- --------
1          DBID          INTEGER                      Y
2          SNAP_INTERVAL INTERVAL DAY(5) TO SECOND(1) Y
3          RETENTION     INTERVAL DAY(5) TO SECOND(1) Y
4          TOPNSQL       INTEGER                      Y
5          STATUS_FLAG   INTEGER                      Y

已用时间: 10.462(毫秒). 执行号:26.
SQL>

记录快照的相关控制信息,字段如下:


SQL> desc SYS.WRM$_SNAPSHOT;

行号     NAME                TYPE$       NULLABLE
---------- ------------------- ----------- --------
1          SNAP_ID             INTEGER     N
2          DBID                INTEGER     Y
3          INSTANCE_NUMBER     INTEGER     Y
4          STARTUP_TIME        DATETIME(6) Y
5          BEGIN_INTERVAL_TIME DATETIME(6) Y
6          END_INTERVAL_TIME   DATETIME(6) Y
7          SNAP_LEVEL          INTEGER     Y

7 rows got

已用时间: 4.559(毫秒). 执行号:27.
SQL>

记录快照的相关信息,字段如下:


SQL> select name,id,  TYPE$,SUBTYPE$ from SYS.SYSOBJECTS where name like 'WRM$_%';

行号     NAME            ID          TYPE$  SUBTYPE$
---------- --------------- ----------- ------ --------
1          WRM$_SNAPSHOT   1281        SCHOBJ UTAB
2          WRM$_WR_CONTROL 1282        SCHOBJ UTAB

已用时间: 1.025(毫秒). 执行号:34.
SQL>

快照信息表

快照信息表记录快照中数据库的一些具体信息。


SQL> desc SYS.WRH$_RESOURCE_LIMIT;

行号     NAME        TYPE$        NULLABLE
---------- ----------- ------------ --------
1          SNAP_ID     INTEGER      Y
2          NAME        VARCHAR(128) Y
3          ID          INTEGER      Y
4          TYPE        VARCHAR(64)  Y
5          SPACE_LIMIT INTEGER      Y
6          SPACE_USED  INTEGER      Y

6 rows got

已用时间: 1.237(毫秒). 执行号:28.
SQL>

显示所有快照中表、用户的空间限制信息,字段如下:


SQL> desc SYS.WRH$_SQL_HISTORY;

行号     NAME                  TYPE$       NULLABLE
---------- --------------------- ----------- --------
1          SNAP_ID               INTEGER     Y
2          SQL_ID                INTEGER     Y
3          START_TIME            DATETIME(6) Y
4          TIME_USED             BIGINT      Y
5          BYTES_DYNAMIC_ALLOCED BIGINT      Y
6          N_LOGIC_READ          INTEGER     Y
7          N_PHY_READ            INTEGER     Y
8          AFFECTED_ROWS         INTEGER     Y
9          HARD_PARSE_FLAG       INTEGER     Y
10         EXEC_ID               INTEGER     Y

10 rows got

已用时间: 4.670(毫秒). 执行号:29.
SQL>

当 INI 参数 ENABLE_MONITOR=1 时,显示所有快照中执行 sql 的历史记录信息,其中不同快照的 SQL_ID 和 START_TIME 肯定不相同,字段如下:


SQL> desc SYS.WRH$_SQLTEXT;

行号     NAME     TYPE$   NULLABLE
---------- -------- ------- --------
1          SNAP_ID  INTEGER Y
2          SQL_ID   INTEGER Y
3          N_EXEC   INTEGER Y
4          SQL_TEXT TEXT    Y
5          SQL_NTH  INTEGER Y

已用时间: 4.297(毫秒). 执行号:30.
SQL> 

显示所有快照的缓冲区中的 SQL 语句信息,字段如下:


SQL> desc SYS.WRH$_SQLTEXT_TMP;

行号     NAME     TYPE$   NULLABLE
---------- -------- ------- --------
1          SNAP_ID  INTEGER Y
2          SQL_ID   INTEGER Y
3          N_EXEC   INTEGER Y
4          SQL_TEXT TEXT    Y
5          SQL_NTH  INTEGER Y

已用时间: 5.706(毫秒). 执行号:31.
SQL>

SYS.WRH$_SQLTEXT 的辅助表,显示所有快照中缓冲区中的 SQL 语句信息,字段如下:


SQL> desc SYS.WRH$_SESSIONS;

行号     NAME       TYPE$   NULLABLE
---------- ---------- ------- --------
1          SNAP_ID    INTEGER Y
2          N_SESSIONS INTEGER Y
3          N_STMTS    INTEGER Y

已用时间: 4.323(毫秒). 执行号:32.
SQL>

显示所有快照中会话的具体信息,如执行的 sql 语句、主库名、当前会话状态、用户名等,字段如下:


SQL> desc SYS.WRH$_SESSION_WAIT_HISTORY;

行号     NAME              TYPE$       NULLABLE
---------- ----------------- ----------- --------
1          SNAP_ID           INTEGER     Y
2          SQL_ID            INTEGER     Y
3          EVENT#            SMALLINT    Y
4          EVENT             VARCHAR(32) Y
5          TIME_WAITED_MICRO INTEGER     Y
6          WAIT_CLASS#       SMALLINT    Y

6 rows got

已用时间: 4.562(毫秒). 执行号:33.
SQL> 

显示所有快照中会话等待事件的历史信息,字段如下:


注:快照信息表共有 38 张表,除了上述 6 张快照信息表与其后缀名相同的动态性能视图在结构上有些许不同,其余的快照信息表仅比对应的动态性能视图多一列名为 SNAP_ID 的整型列,其余结构完全相同,如 SYS.WRH​_ARCH_QUEUE仅比VARCH_QUEUE 多一列 SNAP_ID,这里不再赘述,仅给出快照信息表的名称,具体可参考《DM8 系统管理员手册》附录 2

SQL> select name,id,  TYPE$,SUBTYPE$ from SYS.SYSOBJECTS where name like 'WRH$_%';

行号     NAME                         ID          TYPE$  SUBTYPE$
---------- ---------------------------- ----------- ------ --------
1          WRH$_ARCH_QUEUE              1311        SCHOBJ UTAB
2          WRH$_BUFFERPOOL              1286        SCHOBJ UTAB
3          WRH$_CKPT_HISTORY            1289        SCHOBJ UTAB
4          WRH$_DATAFILE                1287        SCHOBJ UTAB
5          WRH$_DB_CACHE                1295        SCHOBJ UTAB
6          WRH$_DEADLOCK_HISTORY        1294        SCHOBJ UTAB
7          WRH$_DMSQL_EXEC_TIME         1302        SCHOBJ UTAB
8          WRH$_DM_INI                  1297        SCHOBJ UTAB
9          WRH$_HASH_MERGE_USED_HISTORY 1290        SCHOBJ UTAB
10         WRH$_LARGE_MEM_SQLS          1301        SCHOBJ UTAB
11         WRH$_LOCK                    1305        SCHOBJ UTAB

行号     NAME                      ID          TYPE$  SUBTYPE$
---------- ------------------------- ----------- ------ --------
12         WRH$_MAL_INFO             1303        SCHOBJ UTAB
13         WRH$_MEM_POOL             1304        SCHOBJ UTAB
14         WRH$_MTAB_USED_HISTORY    1291        SCHOBJ UTAB
15         WRH$_PSEG_ITEMS           1293        SCHOBJ UTAB
16         WRH$_RESOURCE_LIMIT       1315        SCHOBJ UTAB
17         WRH$_RLOG                 1308        SCHOBJ UTAB
18         WRH$_SCP_CACHE            1298        SCHOBJ UTAB
19         WRH$_SESSIONS             1319        SCHOBJ UTAB
20         WRH$_SESSION_HISTORY      1306        SCHOBJ UTAB
21         WRH$_SESSION_STAT         1313        SCHOBJ UTAB
22         WRH$_SESSION_WAIT_HISTORY 1320        SCHOBJ UTAB

行号     NAME                  ID          TYPE$  SUBTYPE$
---------- --------------------- ----------- ------ --------
23         WRH$_SORT_HISTORY     1312        SCHOBJ UTAB
24         WRH$_SQLTEXT          1317        SCHOBJ UTAB
25         WRH$_SQLTEXT_TMP      1318        SCHOBJ UTAB
26         WRH$_SQL_HISTORY      1316        SCHOBJ UTAB
27         WRH$_SQL_NODE_HISTORY 1300        SCHOBJ UTAB
28         WRH$_SQL_PLAN_NODE    1314        SCHOBJ UTAB
29         WRH$_SQL_STAT_HISTORY 1299        SCHOBJ UTAB
30         WRH$_SYSSTAT          1283        SCHOBJ UTAB
31         WRH$_SYSTEMINFO       1285        SCHOBJ UTAB
32         WRH$_SYSTEM_EVENT     1284        SCHOBJ UTAB
33         WRH$_TABLESPACE       1288        SCHOBJ UTAB

行号     NAME                 ID          TYPE$  SUBTYPE$
---------- -------------------- ----------- ------ --------
34         WRH$_TASK_QUEUE      1309        SCHOBJ UTAB
35         WRH$_TRACE_QUEUE     1310        SCHOBJ UTAB
36         WRH$_VIRTUAL_MACHINE 1307        SCHOBJ UTAB
37         WRH$_VPOOL           1296        SCHOBJ UTAB
38         WRH$_WAIT_HISTORY    1292        SCHOBJ UTAB

38 rows got

已用时间: 0.970(毫秒). 执行号:35.
SQL>

相关语句使用

SP_INIT_AWR_SYS,创建或删除 DBMS_WORKLOAD_REPOSITORY 系统包。其语法格式如下:

void
SP_INIT_AWR_SYS(
	CREATE_FLAG		INT
)

其参数解释如下:

-- CREATE_FLAG

-- 为 1 时表示创建 DBMS_WORKLOAD_REPOSITORY 包;为 0 表示删除该系统包

SF_CHECK_AWR_SYS,系统的 DBMS_WORKLOAD_REPOSITORY 系统包启用状态检测,其语法格式如下:

int
SF_CHECK_AWR_SYS ()

其返回值如下:

-- 0:未启用

-- 1:已启用

AWR报告的生成

检查是否启用AWR,如下:

SQL> select SF_CHECK_AWR_SYS ();

行号     SF_CHECK_AWR_SYS()
---------- ------------------
1          1

已用时间: 7.332(毫秒). 执行号:4.
SQL>

查看一下当前的快照信息,如下:

SQL> SELECT * FROM SYS.WRM$_SNAPSHOT;                   
未选定行

已用时间: 1.670(毫秒). 执行号:5.
SQL> 

查看一下当前默认的快照收集的控制信息,如下:

SQL> SELECT * FROM SYS.WRM$_WR_CONTROL;

行号     DBID        SNAP_INTERVAL                            RETENTION                                TOPNSQL     STATUS_FLAG
---------- ----------- ---------------------------------------- ---------------------------------------- ----------- -----------
1          NULL        INTERVAL '0 1:0:0.0' DAY(5) TO SECOND(1) INTERVAL '8 0:0:0.0' DAY(5) TO SECOND(1) 30          0

已用时间: 1.989(毫秒). 执行号:6.
SQL> 

如上,状态位表示并没有开始收集!


设置时间间隔(10分钟),如下:

SQL> CALL DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(10);
DMSQL 过程已成功完成
已用时间: 131.333(毫秒). 执行号:7.
SQL> 


-- 新的控制信息,如下:
SQL> SELECT * FROM SYS.WRM$_WR_CONTROL;

行号     DBID        SNAP_INTERVAL                             RETENTION                                TOPNSQL     STATUS_FLAG
---------- ----------- ----------------------------------------- ---------------------------------------- ----------- -----------
1          NULL        INTERVAL '0 0:10:0.0' DAY(5) TO SECOND(1) INTERVAL '8 0:0:0.0' DAY(5) TO SECOND(1) 30          1

已用时间: 0.324(毫秒). 执行号:8.
SQL>

如上,设置成功后,可以使用 CREATE_SNAPSHOT 手动创建快照,也可以等待设置的间隔时间后系统自动创建快照,快照 id 从 1 开始递增。

-- 等待了10分钟之后:

SQL> SELECT * FROM SYS.WRM$_SNAPSHOT;

行号     SNAP_ID     DBID        INSTANCE_NUMBER STARTUP_TIME                                                                                         BEGIN_INTERVAL_TIME                                                                                  END_INTERVAL_TIME                                                                                    SNAP_LEVEL 
---------- ----------- ----------- --------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- -----------
1          1           NULL        1               2023-04-10 22:08:18.000000                                                                           NULL                                                                                                 2023-04-10 22:19:37.000000                                                                           1

已用时间: 0.176(毫秒). 执行号:12.
SQL>

下面执行一些SQL,如下:

[dm8@dbserver ~]$ cd /home/dm8/dmdbmsloc/samples/instance_script/bookshop/UTF-8
[dm8@dbserver UTF-8]$ ll
总用量 56
-rwxr-xr-x 1 dm8 dm8   267 46 21:11 CREATESCHEMA.sql
-rwxr-xr-x 1 dm8 dm8 10212 46 21:11 CREATETABLE.sql
-rwxr-xr-x 1 dm8 dm8 40680 46 21:11 INSERTSQL.sql
[dm8@dbserver UTF-8]$
SQL> start /home/dm8/dmdbmsloc/samples/instance_script/bookshop/UTF-8/CREATESCHEMA.sql
SQL> --创建表空间
CREATE TABLESPACE BOOKSHOP DATAFILE 'BOOKSHOP.DBF' size 150;
操作已执行
已用时间: 15.685(毫秒). 执行号:13.
SQL> /
--创建表空间
CREATE TABLESPACE BOOKSHOP DATAFILE 'BOOKSHOP.DBF' size 150;2 行附近出现错误[-3401]:表空间[BOOKSHOP]已存在.
已用时间: 0.160(毫秒). 执行号:0.
SQL> --创建模式
CREATE SCHEMA RESOURCES;
操作已执行
已用时间: 1.243(毫秒). 执行号:14.
SQL> CREATE SCHEMA PERSON;
操作已执行
已用时间: 1.296(毫秒). 执行号:15.
SQL> CREATE SCHEMA SALES;
操作已执行
已用时间: 1.012(毫秒). 执行号:16.
SQL> CREATE SCHEMA PRODUCTION;
操作已执行
已用时间: 1.169(毫秒). 执行号:17.
SQL> CREATE SCHEMA PURCHASING;
操作已执行
已用时间: 0.991(毫秒). 执行号:18.
SQL> CREATE SCHEMA OTHER;
操作已执行
已用时间: 1.146(毫秒). 执行号:19.
SQL> 
SQL> 
SQL> start /home/dm8/dmdbmsloc/samples/instance_script/bookshop/UTF-8/CREATETABLE.sql
SQL> --创建表
--CREATE PERSON.ADDRESS
create table PERSON.ADDRESS
(
ADDRESSID INT IDENTITY(1,1) PRIMARY KEY,
ADDRESS1 VARCHAR(60) NOT NULL,
ADDRESS2 VARCHAR(60),
CITY VARCHAR(30) NOT NULL,
POSTALCODE VARCHAR(15) NOT NULL
) STORAGE (on BOOKSHOP);
操作已执行
已用时间: 4.575(毫秒). 执行号:20.
...
SQL>
SQL> start /home/dm8/dmdbmsloc/samples/instance_script/bookshop/UTF-8/INSERTSQL.sql
...

手动创建快照的命令为:

SQL> DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
HTML 14092 字数 637 段落DMSQL 过程已成功完成
已用时间: 77.515(毫秒). 执行号:289.
SQL>

-- 此时的快照

SQL> SELECT * FROM SYS.WRM$_SNAPSHOT;

行号     SNAP_ID     DBID        INSTANCE_NUMBER STARTUP_TIME                                                                                         BEGIN_INTERVAL_TIME                                                                                  END_INTERVAL_TIME                                                                                    SNAP_LEVEL 
---------- ----------- ----------- --------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- -----------
1          1           NULL        1               2023-04-10 22:08:18.000000                                                                           NULL                                                                                                 2023-04-10 22:19:37.000000                                                                           1
2          2           NULL        1               2023-04-10 22:08:18.000000                                                                           NULL                                                                                                 2023-04-10 22:25:55.000000                                                                           1

已用时间: 0.699(毫秒). 执行号:290.
SQL>

查看 snapshot 的 id 在 1~2 范围内的 AWR 分析报告的带 html 格式的内容。然后复制到文本文件中,保存成 html 格式即可查看。如下:

SQL> SELECT * FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1,2));

行号     OUTPUT                                                                                                                                                                                     
---------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1          <html><head><title>AWR Report for DB: DMDB, Inst: DMDW, Snaps: 1-2</title>
2          <style type="text/css">
3          body.awr {font:bold 10pt arial,helvetica,geneva,sans-serif;color:black; background:white;}
4          pre.awr  {font:8pt courier;color:black; background:white;}
5          h1.awr   {font:bold 20pt arial,helvetica,geneva,sans-serif;color:#336699;background-color:white;border-bottom:1px solid #cccc99;margin-top:0pt; margin-bottom:0pt;padding:0px 0px 0px 0px;}
6          h2.awr   {font:bold 18pt arial,helvetica,geneva,sans-serif;color:#336699;background-color:white;margin-top:4pt; margin-bottom:0pt;}
7          h3.awr {font:bold 16pt arial,helvetica,geneva,sans-serif;color:#336699;background-color:white;margin-top:4pt; margin-bottom:0pt;}
8          li.awr {font: 8pt arial,helvetica,geneva,sans-serif; color:black; background:white;}
9          th.awrnobg {font:bold 8pt arial,helvetica,geneva,sans-serif; color:black; background:white;padding-left:4px; padding-right:4px;padding-bottom:2px}
10         th.awrbg {font:bold 8pt arial,helvetica,geneva,sans-serif; color:white; background:#0066cc;padding-left:4px; padding-right:4px;padding-bottom:2px}
11         td.awrnc {font:8pt arial,helvetica,geneva,sans-serif;color:black;background:white;vertical-align:top;}

行号     OUTPUT                                                                                                                                                                    
---------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
12         td.awrc    {font:8pt arial,helvetica,geneva,sans-serif;color:black;background:#ffffcc; vertical-align:top;}
...
...
行号     OUTPUT                                               
---------- -----------------------------------------------------
2058       </table><p />
2059       <br /><a class="awr" href="#top">Back To Top</a><p />
2060       <p />End of Report</body></html>

2060 rows got

已用时间: 186.263(毫秒). 执行号:291.
SQL>

或者把 snapshot 的 id 在 1~2 范围内的 AWR 分析报告生成到 .html 文件。如下:

SQL> CALL SYS.AWR_REPORT_HTML(1,2,'/home/dm8','AWR_1_2.html');
DMSQL 过程已成功完成
已用时间: 230.449(毫秒). 执行号:294.
SQL>

DM的学习心得和知识总结(三)|DM数据库DBMS_WORKLOAD_REPOSITORY 包及其性能分析工具AWR-LMLPHP


环境清理,如下:

SQL> SELECT * FROM SYS.WRM$_SNAPSHOT;

行号     SNAP_ID     DBID        INSTANCE_NUMBER STARTUP_TIME                                                                                         BEGIN_INTERVAL_TIME                                                                                  END_INTERVAL_TIME                                                                                    SNAP_LEVEL 
---------- ----------- ----------- --------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- -----------
1          1           NULL        1               2023-04-10 22:08:18.000000                                                                           NULL                                                                                                 2023-04-10 22:19:37.000000                                                                           1
2          2           NULL        1               2023-04-10 22:08:18.000000                                                                           NULL                                                                                                 2023-04-10 22:25:55.000000                                                                           1
3          3           NULL        1               2023-04-10 22:08:18.000000                                                                           NULL                                                                                                 2023-04-10 22:29:37.000000                                                                           1

已用时间: 0.239(毫秒). 执行号:295.
SQL> 
SQL> CALL DBMS_WORKLOAD_REPOSITORY.AWR_CLEAR_HISTORY();
DMSQL 过程已成功完成
已用时间: 30.618(毫秒). 执行号:296.
SQL> 
SQL> SELECT * FROM SYS.WRM$_SNAPSHOT;
未选定行

已用时间: 0.307(毫秒). 执行号:297.
SQL> 
SQL> SP_INIT_AWR_SYS(0);
DMSQL 过程已成功完成
已用时间: 389.192(毫秒). 执行号:298.
SQL> 
SQL> SELECT SF_CHECK_AWR_SYS();

行号     SF_CHECK_AWR_SYS()
---------- ------------------
1          0

已用时间: 2.255(毫秒). 执行号:299.
SQL> 
SQL> select file_name,tablespace_name from dba_data_files;

行号     FILE_NAME                                  TABLESPACE_NAME
---------- ------------------------------------------ ---------------
1          /home/dm8/dmdbmsloc/data/DMDB/SYSTEM.DBF   SYSTEM
2          /home/dm8/dmdbmsloc/data/DMDB/BOOKSHOP.DBF BOOKSHOP
3          /home/dm8/dmdbmsloc/data/DMDB/MAIN.DBF     MAIN
4          /home/dm8/dmdbmsloc/data/DMDB/TEMP.DBF     TEMP
5          /home/dm8/dmdbmsloc/data/DMDB/ROLL.DBF     ROLL

已用时间: 3.467(毫秒). 执行号:300.
SQL>

注:通过 DMBS_WORKLOAD_REPOSITORY 包还可以对快照本身做增删改操作。

例 1 删除 id 在 22~32 之间的 snapshot:

CALL DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(22,32);

例 2 修改 snapshot 的间隔时间为 30 分钟、保留时间为 1 天:

CALL DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(1440,30);

之后查询设置后快照参数。

SELECT * FROM SYS.WRM$_WR_CONTROL;

例 3 创建一次 snapshot:

CALL DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();

例 4 清理全部 snapshot:

CALL DBMS_WORKLOAD_REPOSITORY.AWR_CLEAR_HISTORY();

例 5 设置 snapshot 的间隔为 10 分钟:

CALL DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(10); 

04-13 03:14