注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:
文章快速说明索引
学习目标:
目的:前面我们分享过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 4月 6 21:11 CREATESCHEMA.sql
-rwxr-xr-x 1 dm8 dm8 10212 4月 6 21:11 CREATETABLE.sql
-rwxr-xr-x 1 dm8 dm8 40680 4月 6 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>
环境清理,如下:
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);