通过shell脚本抓取awr报告中的问题sql(r6笔记第78天)

awr报告中的sql明细部分基本必看的部分,尤其是SQL Order by Elapsed time这个部分,能够很清晰的看到哪些sql语句占用了较多的DB time,所占的比例。这个可以作为调优时的一个重要参考,可以有针对性的来看哪些sql需要格外关注。 比如说我们得到了一个awr报告,Elapsed time这个部分的内容如下。可以很明显看出sql_id为dfb15m5s2uwmc的sql需要格外关注,因为它占用了近一半的DB time.

Elapsed Time (s)

Executions

per Exec (s)

%Total

SQL Id

3,601.90

0

48.52

dfb15m5s2uwmc

1,612.04

21

76.76

21.71

8tmf11fvxy09j

1,593.80

20

79.69

21.47

cy55p6nrd31db

298.34

20

14.92

4.02

29tdwfv5d9s4f

awr提供的功能集很完整,如果我们能够更快的定位出来哪些sql占用了较多的DB time而不用每次都去生成一个awr报告,其实也是可以实现的,我们可以定制。 在之前的博客中提到awr的导出 http://blog.itpub.net/23718752/viewspace-1123134/ 部分日志如下: . . 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

那么我们就可以直接从这些数据字典历史表里去查看所需要的信息而不用每次都重新生成一个awr报告。 当然实现的过程也略微费了一些周折,把脚本稍一加工,就成了shell版本。 sqlplus -s $DB_CONN_STR@$SH_DB_SID <<EOF break on db_name set pages 50 set linesize 100 col elapsed_time format a10 col per_total format a10 prompt prompt Current Instance prompt ~~~~~~~~~~~~~~~~ select d.dbid dbid , d.name db_name , i.instance_number inst_num , i.instance_name inst_name from v\$database d, v\$instance i; select snap_id,sql_id,EXECUTIONS_DELTA,max_elapsed elapsed_time,per_total||'%' per_total from (select distinct snap_id,sql_id,EXECUTIONS_DELTA,trunc(max(ELAPSED_TIME_DELTA) OVER (PARTITION BY snap_id,sql_id )/1000000,0)||'s' max_elapsed, trunc((max(ELAPSED_TIME_DELTA) OVER (PARTITION BY snap_id,sql_id))/(SUM(ELAPSED_TIME_DELTA) OVER (PARTITION BY snap_id )),2)*100 per_total from dba_hist_sqlstat where snap_id=$1 order by 5 desc ) where rownum<=5;

输出的内容结果如下,和html的格式比起来,也还是很清晰的,只需要输入结束的快照号即可。 $ ksh showsnapsql.sh 57584 Current Instance ~~~~~~~~~~~~~~~~ DBID DB_NAME INST_NUM INST_NAME ---------- --------- ---------- ---------------- 2534640677 TESTDB2 1 xxxxx SNAP_ID SQL_ID EXECUTIONS_DELTA ELAPSED_TI PER_TOTAL ---------- ------------- ---------------- ---------- ---------- 57494 dfb15m5s2uwmc 0 3601s 48% 57494 8tmf11fvxy09j 21 1612s 21% 57494 cy55p6nrd31db 20 1593s 21% 57494 29tdwfv5d9s4f 20 298s 4% 57494 c7k4g2urpu1sc 0 175s 2% 这个时候就可以轻松抓取到问题sql,直接来判定是否需要更多的信息。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2015-10-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

awr性能问题排查第一篇(r3笔记第42天)

对于awr,里面涵盖的内容比较杂,有时候看报告的时候总是不知道该怎么下手。时间长了,可能会有一些阅读习惯或者心得。今天在看大师chris lawson的一篇博文...

2894
来自专栏杨建荣的学习笔记

只言片语分析datapump的工作原理(r2第18天)

datapump是从oracle 10g推出的新的数据导入导出工具,可以说是exp/imp的加强版,主要的亮点在于服务端,结合了direct+parallel,...

2283
来自专栏乐沙弥的世界

高水位线和全表扫描

   高水位线好比水库中储水的水位线,用于描述数据库中段的扩展方式。高水位线对全表扫描方式有着至关重要的影响。当使用delete 操作 表记录时,高水位线并不...

772
来自专栏分布式系统和大数据处理

Hive中分区和分桶的概念和操作

在使用传统的RDBMS数据库(关系数据库),例如MySql时,对于一些大表,我们通常会进行分表操作,以提升查询效率。在Hive中也提供了类似的概念和操作,本文将...

1521
来自专栏杨建荣的学习笔记

关于等待事件"read by other session"(r3笔记第89天)

在查看数据库负载的时候,发现早上10点开始到12点的这两个钟头,系统负载异常的高。于是抓取了一个awr报告。 Snap IdSnap TimeSessions...

2939
来自专栏程序猿

Oracle_12C的新特性

这里我们来领略下Tom眼中的12个特性增强: ? #1 Even better PL/SQL from SQL, 直接在SQL中嵌入PL/SQL对象并运行,猜测...

3009
来自专栏数据和云

追本溯源:Oracle 只读表空间的探索实践

作者简介 ? 胡中豪 云和恩墨西区交付工程师,多年一线 DBA 经验,曾服务于运营商、电网、政府行业、银行等行业客户;擅长数据库故障处理、性能优化、实施升级 本...

2813
来自专栏Hadoop实操

如何使用Sqoop2

通sqoop1一样,sqoop2同样也是在Hadoop和关系型数据库之间互传数据的工具,只不过sqoop2引入sqoop server,集中化管理connect...

1.5K8
来自专栏杨建荣的学习笔记

一个oracle蠕虫病毒 (r4笔记第60天)

关于计算机病毒,说起来内容就很丰富了,但是第一次听到关于oracle中的病毒时,却感觉很新鲜。这是一个蠕虫病毒,距离现在已经有10年了,但是现在看起来还是能够借...

2523
来自专栏杨建荣的学习笔记

物化视图相关的性能改进 (r7笔记第58天)

今天早上开发的一个同事找到我说他早上做了一个统计查询,但是感觉速度很慢,已经过了一个小时了还没有反应。想让我看看是什么情况。 我通过v$session查到有一个...

3375

扫码关注云+社区