没有合适的资源?快使用搜索试试~ 我知道了~
首页Oracle AWR报告深入分析
文档作者:notmain 一、 文档摘 要: 文档编写出发点: 网络上大量关于分析 AWR 报表的文档,此类文档没有提供相关的资料,有些描述有岐义。 导致很多新人只知其然不知所以然。 此文档目的帮助更加深入理解 AWR 报表,为 oracle 从业者与技术爱好做性能分析与性 能监控提供参考资料。 文档编写依据: 文档基于 oracle 包源码分析得出。 dbms_swrf_report_internal,test_dbms_workload_repository 二个 这二个包的源码是通过 wrap 加密保存的,需要用解密工具才能获得源码。 文档声明: 1、此文档内容纯属个人学习总结文档,不对文档内容完全准确负责。 2、由于分析 awr 生成存储过程工作量极大,此文档很多代码没有经过优化与完善只初 步对生成内容与 awr 报表对比正确。 3、此文档的 sql 语句 98%以上是根据源码解析而成,非 oracle 源码 sql 4、建议有兴趣的同学去学习一下 oracle plsql 编写技巧,能在 plsql 缩写技能与编程 思想上有所提升。 5、Awr 二个包的代码极其复杂,对学习者的 plsql 编写能力有要求。 6、对应的二个包还包括 ADDM,ASH 的源码,有兴趣的同学可以深入了解
资源详情
资源评论
资源推荐

http://www.Database8.com
一、 文档摘 要:
文档编写出发点:
网络上大量关于分析 AWR 报表的文档,此类文档没有提供相关的资料,有些描述有岐义。
导致很多新人只知其然不知所以然。
此文档目的帮助更加深入理解 AWR 报表,为 oracle 从业者与技术爱好做性能分析与性
能监控提供参考资料。
文档编写依据:
文档基于 oracle
包源码分析得出。
dbms_swrf_report_internal,test_dbms_workload_repository 二个
这二个包的源码是通过 wrap 加密保存的,需要用解密工具才能获得源码。
文档声明:
1、此文档内容纯属个人学习总结文档,不对文档内容完全准确负责。
2、由于分析 awr 生成存储过程工作量极大,此文档很多代码没有经过优化与完善只初
步对生成内容与 awr 报表对比正确。
3、此文档的 sql 语句 98%以上是根据源码解析而成,非 oracle 源码 sql
4、建议有兴趣的同学去学习一下 oracle plsql 编写技巧,能在 plsql 缩写技能与编程
思想上有所提升。
5、Awr 二个包的代码极其复杂,对学习者的 plsql 编写能力有要求。
6、对应的二个包还包括 ADDM,ASH 的源码,有兴趣的同学可以深入了解
学习困惑:
在编写此文档的过程中,很多人对此行为持不屑与不解的态度,认为有 awr 报表工具分
析这个代码完全没有意义。
感觉在 IT 行业混迹数年,一无事成。很多东西都不知道原理甚至使用都不清楚,分析
此报表为了更深入理解 oracle 性能分析原理,期望有更多的 IT 人士能把知识共享出来。今
后一段时间里我将致力于 oracle 一些原理的分析,希望我的学习经历能帮助别人缩短学习
时间。
后续:
1、将视情况会把每个 awr 报表对应说明,根据自己的理解做相应描述,以照顾新人。
2、过一段时间会把数据字典的一些分析与个人理解共享出来。

文档作者:notmain
e_mail: notmain@163.com QQ:476636971
3、
二、 分析过 程
1、原本计划 3-5 天分析出此文档,oracle 公司的 plsql 编写能力叹为观止,时间进度
近半个月,分析时间达 80 个小时以上。
2、Awr 工作原理
1、调用 awr 脚本,awr 脚本调用 awrrpti
awrrpti 脚本调用
select output from table(dbms_workload_repository.
&fn_name( :dbid,:inst_num,:bid,:eid,:rpt_options ));
2、&fn_name 会根据用户输入选择调用 AWR_REPORT_HTML 或
AWR_REPORT_TEXT
3、AWR_REPORT_HTML 调用:
DBMS_SWRF_REPORT_INTERNAL.AWR_REPORT_MAIN(L_DBID,
L_INST_NUM, L_BID,
L_EID, L_OPTIONS, DBMS_SWRF_REPORT_INTERNAL.TRUE_I);
4、AWR_REPORT_MAIN 核心操作说明:
----此存储过程会把报表需要的数据生成到
----prt_stats,rpt_params,prt_time_vals 三个数据定义表中
REPORT_INIT(L_DBID, L_INST_NUM, L_BID, L_EID, RPT_STATS,
RPT_PARAMS,
RPT_TIME_VALS);
----生成 awr Main Report 之前的报表
REPORT_SUMMARY(L_DBID, L_INST_NUM,
L_BID, L_EID, L_OPTIONS, TO_HTML, FALSE_I);
----生成剩下的报表
DISPLAY_SUBTREES_OF(MAIN_REPT, TO_HTML, L_OPTIONS, L_DBID,
L_INST_NUM, L_BID, L_EID);
5、相关源代码会在附件中:
《PACKAGE dbms_workload_repository.txt》
《PACKAGE BODY dbms_workload_repository.txt》
《PACKAGE dbms_swrf_report_interna.txt》
《package body dbms_swrf_report_internal.txt》
《awr 大致分析过程.txt》 ---此文档为分析文档
《REPORT_INIT.txt》 ---此文档为分析文档

文档作者:notmain
e_mail: notmain@163.com QQ:476636971
3、分析出来对应的 SQL 语句(语句排列顺序跟 AWR 报表显示顺序一致)
---- DB Name DB Id Instance Inst num Release RAC Host
SELECT DB_NAME,
&dbid,
INSTANCE_NAME,
&inst_num,
VERSION,
PARALLEL,
HOST_NAME
FROM DBA_HIST_DATABASE_INSTANCE DI, DBA_HIST_SNAPSHOT S
WHERE S.SNAP_ID = &beg_snap
AND S.DBID = &DBID
AND S.INSTANCE_NUMBER = &INST_NUM
AND DI.DBID = S.DBID
AND DI.INSTANCE_NUMBER = S.INSTANCE_NUMBER
AND DI.STARTUP_TIME = S.STARTUP_TIME;
----
Begin
Snap:
Snap Time
SELECT END_INTERVAL_TIME
FROM DBA_HIST_SNAPSHOT B
WHERE B.SNAP_ID = &beg_snap
AND B.DBID = &DBID
AND B.INSTANCE_NUMBER = &INST_NUM;
----
Begin
Snap:
Sessions
SELECT VALUE
FROM DBA_HIST_SYSSTAT
WHERE SNAP_ID = &beg_snap
AND DBID = &DBID
AND INSTANCE_NUMBER = &INST_NUM
AND STAT_NAME = 'logons current';
----
Begin
Snap:
Cursors/Session
select a.value /
b.value
from
(SELECT VALUE
FROM DBA_HIST_SYSSTAT
WHERE SNAP_ID = &beg_snap
AND DBID = &DBID
AND INSTANCE_NUMBER = &INST_NUM
AND STAT_NAME = 'opened cursors current') a,

(SELECT VALUE
剩余63页未读,继续阅读













安全验证
文档复制为VIP权益,开通VIP直接复制

评论15