通过Shell脚本抓取AWR报告中的问题SQL

awr报告中的sql明细部分基本必看的部分,尤其是SQL Order by Elapsed time这个部分,能够很清晰的看到哪些sql语句占用了较多的DB time,所占的比例。这个可以作为调优时的一个重要参考,可以有针对性的来看哪些sql需要格外关注。

比如说我们得到了一个awr报告,Elapsed time这个部分的内容如下。可以很明显看出sql_id为dfb15m5s2uwmc的sql需要格外关注,因为它占用了近一半的DB time.

Elapsed Time (s)Executionsper Exec (s)%Total%CPU%IOSQL IdSQL ModuleSQL Text
3,601.90   0       48.52   99.77   0.16   dfb15m5s2uwmc   JDBC Thin Client   SELECT :1, machinecode, cn, co...  
1,612.04   21   76.76   21.71   99.97   0.00   8tmf11fvxy09j   JDBC Thin Client   SELECT ROUND(AVG(SUM(END_TIME...  
1,593.80   20   79.69   21.47   99.97   0.00   cy55p6nrd31db   JDBC Thin Client   SELECT MAX(USER_CLASS) FROM S...  
298.34   20   14.92   4.02   99.96   0.00   29tdwfv5d9s4f   JDBC Thin Client   SELECT NVL(SUM(OTAL), ...  

awr提供的功能集很完整,如果我们能够更快的定位出来哪些sql占用了较多的DB time而不用每次都去生成一个awr报告,其实也是可以实现的,我们可以定制。

部分日志如下:
. . exported "SYS"."WRH$_SQL_PLAN"                      432.1 KB    1089 rows
 . . exported "SYS"."WRH$_LATCH":"WRH$_LATCH_3645037571_0"  198.6 KB    3871 rows
 . . exported "SYS"."WRH$_SYSMETRIC_HISTORY"              180.1 KB    3600 rows

可以看到awr的基表是wrh$开头的,这个和我们常用的数据字典表息息相关。
 比如sqlstat,数据字典里的历史数据就把wrh$换位dba_hist即可。
 我们查看dba_hist_sqlstat的基表,其实发现就是wrh$这样的基表。
$ ksh showdict.sh DBA_HIST_SQLSTAT
 object_details
 OWNER                          OBJECT_ID DATA_OBJECT_ID OBJECT_NAME                    OBJECT_TYPE
 ------------------------------ ---------- -------------- ------------------------------ -------------------
 SYS                                  9409                DBA_HIST_SQLSTAT              VIEW
 PUBLIC                              9410                DBA_HIST_SQLSTAT              SYNONYM
 synonym_details
 OWNER                          SYNONYM_NAME
 ------------------------------ ------------------------------
 PUBLIC                        DBA_HIST_SQLSTAT

view_details
 VIEW_NAME                      TEXT
 ------------------------------ --------------------------------------------------------------------------------
 DBA_HIST_SQLSTAT              select sql.snap_id, sql.dbid, sql.instance_number,
                                xxxx  from WRM$_SNAPSHOT sn, WRH$_SQLSTAT sql
                                  where    sn.snap_id        = sql.snap_id
                                        and sn.dbid            = sql.dbid
                                        and sn.instance_number = sql.instance_number
                                        and sn.status          = 0

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ef8489f0a65d950666f921bccce3fe17.html