[20150705]从AWR抽取有问题的sql语句.txt

[20150705]从AWR抽取有问题的sql语句.txt

--闲着没事,写一个脚本从awr数据里面抽取有问题的sql语句,主要我不想看awr报表,而优化80%的问题集中在sql语句,实际上可能更多.
--另外我看报表主要集中在9-11点,下午3-5点这些报表,这样可能漏调一些晚上的一些schedule,job等相关sql语句的优化.

--注意一定要在环境变量中设置
--NLS_DATA_FORMAT='YYYY/MM/DD HH24:MI:SS'

prompt
prompt @deltasqlid begin_time end_time count
prompt for example :  @deltasqlid '2015/06/24' '2015/06/25' 4
prompt

select * from (  SELECT sql_id, event, COUNT (*)
    FROM DBA_HIST_ACTIVE_SESS_HISTORY
   WHERE     sql_id IS NOT NULL
         AND event IS NOT NULL
         AND SAMPLE_TIME BETWEEN '&&1' AND '&&2'
GROUP BY sql_id, event
having count(*)>=&&3
ORDER BY 3 DESC)
union all
  select * from (
  SELECT sql_id, nvl(event,'on cpu'), COUNT (*)
    FROM DBA_HIST_ACTIVE_SESS_HISTORY
   WHERE     sql_id IS NOT NULL
         AND event IS NULL
         AND SAMPLE_TIME BETWEEN '&&1' AND '&&2'
GROUP BY sql_id, event
having count(*)>=&&3
ORDER BY 3 DESC) where rownum

--说明: event is NULL 我单独分开,实际上也许是重点,对我们的生产系统,因为我们的机器内存很大.基本没有物理读的情况.
--另外后面的count可以理解为时间,应该x10,对应的单位应该是秒.
--因为v$active_session_history是1秒取样1次,而DBA_HIST_ACTIVE_SESS_HISTORY是10秒取样,这样算出来的count x 10,对应的应该是这个语句的
--花在对应event的秒数,不知道我理解是否正确.
--我看了基本符合我在awr报表看到的结果.

时间: 2024-10-24 23:07:17

[20150705]从AWR抽取有问题的sql语句.txt的相关文章

[20160704]从跟踪文件抽取sql语句.txt

[20160704]从跟踪文件抽取sql语句.txt --以前写过两篇,链接如下: http://blog.itpub.net/267265/viewspace-775398/ http://blog.itpub.net/267265/viewspace-748041/ 1个利用tkprof的recodr参数,可以记录跟踪整个sql语句序列,缺点就是丢失一些递归的sql语句.另外一个利用awk脚本抽取sql语句. 今天再写一个简单一点的脚本: 1.环境: SCOTT@book> @ &r/v

[20121101]tkprof抽取sql语句.txt

[20121101]tkprof抽取sql语句.txt 有时候跟踪分析sql语句,并不是要看里面的递归的执行,或者性能问题.而是要收集跟踪命令的执行序列. 查看tkprof的帮助: Usage: tkprof tracefile outputfile [explain= ] [table= ]               [print= ] [insert= ] [sys= ] [sort= ]   table=schema.tablename   Use 'schema.tablename'

[20131031]从跟踪文件中抽取sql语句.txt

[20131031]从跟踪文件中抽取sql语句.txt 以前写过利用tkprof顺序抽取执行的sql语句http://space.itpub.net/267265/viewspace-748041但是递归语句没有记录下来. 今天看了一篇blog,记录如下:--说明:我修改2处:dept那行里面的-1原文有错,应该是半角-1.--printf "%s %s %s>>>> %s\n", stmt_count, depth_level, cursor_no, $0--

[20150403]修正sql语句.txt

[20150403]修正sql语句.txt --主要在一些调试与优化时加入hint容易. --参考了链接,我自己做了小量的修改. http://blog.itpub.net/22034023/viewspace-1063610/ /* Formatted on 2015/4/3 9:01:53 (QP5 v5.252.13127.32867) */ --SET LINESIZE 153 SET VERIFY OFF --SET PAGESIZE 10000 --ACCEPT sql_id - -

[20161230]查看父游标中sql语句.txt

[20161230]查看父游标中sql语句.txt --上午巡检完,无聊,测试使用oradebug下查看sql语句在父游标中的内容.sql语句在执行第一次硬解析时生成父子游标,其中父游标chunk --中保存sql语句,测试通过oradebug下如何查看: 1.环境: SCOTT@book> select * from dept where deptno=10;     DEPTNO DNAME          LOC ---------- -------------- -----------

[20150831]中文符号在sql语句.txt

[20150831]中文符号在sql语句.txt --今天在检查代码时发现sql语句中存在全角的等号"=",很明显oracle并没有报错. --实际上itpub上以前有人提到全角","也不会报错. --自己也测试一下: SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -----

[20160815]查询相关表的sql语句.txt

[20160815]查询相关表的sql语句.txt --以前我要查询相关表的sql语句,我一般在toad下执行sga trace,直接在sql search text 输入表名,但是这里存在一个问题,仅仅检 --索sql语句的前1000个字节才有效. --如果我要查询的表在1000字符外,无法查询,通过例子说明: 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ---------

[20150527]跟踪单个sql语句.txt

[20150527]跟踪单个sql语句.txt --11G下可以使用如下脚本跟踪单个sql语句,&1 表示 sql_id.   $ cat sql_trace.sql alter system set events 'sql_trace[SQL:&1] level 12'; host sleep 300 alter system set events 'sql_trace[SQL:&1] off'; --缺点生成的文件在各个用户的trc文件中.

[20130226]跟踪特定IP的sql语句.txt

[20130226]跟踪特定IP的sql语句.txt 工作需要,跟踪特定IP地址发出的sql语句.可惜我们生产系统是10g的,如果是11G支持trcsess可以合并trc文件,再分析.自己做一个测试看看. http://space.itpub.net/267265/viewspace-754003 1.建立logon触发器: CREATE OR REPLACE TRIGGER SYS.on_logon_trigger    AFTER LOGON ON DATABASE DECLARE    v