如何实现通过AWR报告中记录的SQL Id获得SQL语句的执行
这篇文章给大家介绍如何实现通过AWR报告中记录的SQL Id获得SQL语句的执行,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
获得sql的执行计划的方法很多,例如解释和SQL跟踪等的计划。
这里给大家介绍另外一种方法.这种方法可以很方便和awr报告相结合.对于在生成的awr报告中被发现的消耗资源较多的sql语句,我们可以使用awr提供的awrsqrpt.sql脚本达到获取sql语句执行计划的目的。
1.下面是以获得sql ID为"8p23kcbgfqnk 4"的sql语句的执行计划为例,展示一下这个过程。
SQL>@?/rDBMS/admin/awrsqrpt.sql
当前实例
~~~~~~~~~~~~~~~~
数据库ID DB名称inst num实例
----------- ------------ -------- ------------
1922648773 HSW 1 HSW
指定报表类型
~~~~~~~~~~~~~~~~~~~~~~~
您想要HTML报告还是纯文本报告?
为HTML报告输入'html',为纯文本输入'text'
默认为"html"
输入Report_type的值:Text
指定类型:文本
此WorkloadRepository模式中的实例
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
数据库ID在num DB名称实例主机中
------------ -------- ------------ ------------ ------------
*1922648773 1 HSW HSW HOUSW-LT
数据库ID使用1922648773
使用1作为实例编号
指定要从中选择的快照天数。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入天数(N)将导致最近的
(N)列出快照的天数。按
指定数字列表所有已完成的快照。
输入num_d数的值:3
列出最后3天完成快照
卡扣
实例DB名称SnapID快照启动级别
------------ ------------ --------- ------------------ -----
HSW 1 14 2010年9月1日12:00 1
2010年9月2日13:00 1
2010年9月3日14:00 1
2010年9月4日15:00 1
2010年9月5日16:04 1
2010年9月6日17:00 1
2010年9月7日22:50 1
指定开始和结束快照ID
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入BEGIN_Snap的值:6
指定的开始快照ID:6
输入End_Snap的值:7
指定的结束快照ID:7
指定SQL ID
~~~~~~~~~~~~~~~~~~
输入SQL_id的值:8p23kcbgfqnk4
指定的SQL ID:8p23kcbgfqnk 4
指定报表名称
~~~~~~~~~~~~~~~~~~~~~~~
默认的报表文件名是awrsqlrpt_1_6_7.txt。要使用这个名字,
按
输入Report_name的值:8p23kcbgfqnk4
使用报表名8p23kcbgfqnk 4
工作负载库SQL报告
快照期间摘要
DB名称DBID实例Instnum发布RAC主机
------------ ----------- ------------ -------- ----------- --- ------------
HSW 1922648773 HSW 1 10.2.0.3.0无HOUSW-LT
快速ID捕捉时间会话CURS/Sess
--------- ------------------- -------- ---------
开始快照:6 14-9月10日17:00:12 15 2.3
结束时间:7 14-9月10日22:50:29 17 2.3
运行时间:350.29分钟(分钟)
DB时间:0.02(分钟)
SQL摘要DB/Inst:HSW/HSW快照:6-7
经过
SQL ID时间(MS)
------------- ----------
8p23kcbgfqnk 4 19,672
从seg$中选择文件#,块#,ts#,其中类型为#=3
-------------------------------------------------------------
SQL ID:8p23kcbgfqnk4db/inst:HSW/HSW快照:6-7
>第一次捕获和最后一次捕获快照ID
参考快照ID,在快照范围内使用
>从seg$中选择文件#、块#、ts#,其中类型为#=3
计划哈希总计经过的第一次捕获最后一次捕获
#值时间(Ms)执行快照ID
--- ---------------- ---------------- ------------- ------------- --------------
1 1605285479 19,672 1 7 7
-------------------------------------------------------------
计划1(PHV:1605285479)
-----------------------
计划统计DB/INST:HSW/HSW快照:6-7
>%TotalDB时间是SQL语句除以的时间
到数据库总时间乘以100
每次执行%Snap的STATNAME语句
---------------------------------------- ---------- -------------- -------
所用时间(毫秒)19,672 19,672.2 1351.7
CPU时间(Ms)32 32.3 79.6
处决1个N/A/N/A
缓冲区获取141 141.0 0.6
磁盘读取0 0.0 0.0
解析调用11.00.1
行0 0.0 N/A
用户I/O等待时间(MS)0 N/A N/A
簇等待时间(MS)0 N/A N/A
申请等待时间(Ms)0 N/A N/A
并发等待时间(MS)0 N/A N/A
无效0 N/A N/A
版本计数1 N/A N/A
可共享Mem(KB)12 N/A N/A
-------------------------------------------------------------
执行计划
--------------------------------------------------------------------------
\x{e76f}\x{e76f}
--------------------------------------------------------------------------
\x{e76f}\x{e76f
*
--------------------------------------------------------------------------
全SQL文本
SQL ID SQL文本
------------ -----------------------------------------------------------------
8p23kcbgfqnk选择文件#,块#,ts#从seg$where类型#=3
书面报告给8p23kcbgfqnk 4
2.小结
在知道SQL ID的前提下,我们可以使用Oracle自带的awrsqrpt.sql脚本快速的获得SQL语句的执行计划信息(在上述报告中显示的信息不局限于此)。
关于如何实现通过AWR报告中记录的SQL Id获得SQL语句的执行就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。