【Oracle脚本】查找Oracle高消耗语句

原创 2014年03月21日 23:00:24

       在运行下面的脚本之前需要先用生成AWR报告的SQL(程序脚本一般保存在$ORACLE_HOME下的rdbms/admin中,名称为awrrpt.sql,需要输入生成AWR报告的天数范围)找到开始和结束的snapshot编号:begin_snapend_snap
set line 1000
set linesize 200
set pagesize 2000
set long 999999
set echo on
set markup html on
select res.*
  from (select          to_char(d.end_interval_time,'yyyy-mm-dd'),
                        a.PARSING_SCHEMA_NAME,
                        c.MODULE,
                        a.sql_id,
                        a.execs as 执行次数,
                        ROUND(a.cpu_times / a.execs, 2) as 单次执行时间,
                        a.cpu_times as cpu消耗时间,
                        ROUND(a.cpu_times / b.sum_time * 100, 2) as 消耗cpu百分比,
                        a.buffer_gets as 逻辑读,
                        ROUND(a.buffer_gets / b.sum_buffer * 100, 2) as 逻辑读百分比,
                        a.disk_read as 物理读,
                        ROUND(a.disk_read / b.sum_disk * 100, 2) as 物理读百分比,
                        c.sql_fulltext
          from (select PARSING_SCHEMA_NAME,
                       sql_id,
                       sum(EXECUTIONS_DELTA) AS execs,
                       round(sum(CPU_TIME_DELTA) / 1000000, 2) AS cpu_times,
                       round(sum(ELAPSED_TIME_DELTA) / 1000000, 2) AS elapsed_time,
                       sum(BUFFER_GETS_DELTA) AS buffer_gets,
                       sum(DISK_READS_DELTA) AS disk_read
                  from sys.WRH$_SQLSTAT wr, gv$instance i
                 where SNAP_ID <= &end_snap
                   and snap_id >= &begin_snap
                   and wr.INSTANCE_NUMBER = i.INSTANCE_NUMBER
                   and i.instance_number = &instance_number
                 group by PARSING_SCHEMA_NAME, wr.INSTANCE_NUMBER, sql_id) a,
               (SELECT round(SUM(CPU_TIME_DELTA) / 1000000, 2) sum_time,
                       SUM(BUFFER_GETS_DELTA) sum_buffer,
                       sum(DISK_READS_DELTA) sum_disk
                  FROM sys.WRH$_SQLSTAT wr, gv$instance i
                 where SNAP_ID <= &end_snap
                   and snap_id >= &begin_snap
                   and wr.INSTANCE_NUMBER = i.INSTANCE_NUMBER
                   and i.instance_number = &instance_number) b,
               v$sqlarea c,
               dba_hist_snapshot d               
         where a.execs > 0
           and a.sql_id = c.sql_id
           and a.PARSING_SCHEMA_NAME <> 'SYS'
           and d.snap_id = &end_snap
         order by cpu消耗时间 desc) res
         where rownum < 41;
exit


将脚本输出内容保存到记事本txt中,并将记事本的后缀名更改为.html,这样就可以输出以下的网页内容:


 

 

 

 

相关文章推荐

Excel中用宏批量整理SQL脚本,生成ORACLE触发器语句

今天,因为一批表需要加响应的触发器,同步两个数据库之间的表,考虑到表比较多,而且一条记录的对照方式需要表的全字段,所以想着手工整理或者用文本方式整理比较麻烦,而且一旦有变动或者新的要求,也比较复杂,于...

Oracle高资源消耗SQL语句定位

文章目录 相关系统视图功能与区别 高资源消耗SQL查找定位 相关视图重要字段 Oracle SQL语句资源消耗监控最常用的系统视图有v$sql、v$sqlarea、v$sqlt...
  • hanbowu
  • hanbowu
  • 2015年05月29日 15:31
  • 867

oracle消耗资源的sql查询语句记录

  • 2012年06月25日 13:10
  • 613B
  • 下载

Oracle之查看最近最消耗CPU的SQL语句及会话信息的方法

导读: 1、查找最近一分钟内,最消耗CPU的SQL语句; 2、查找最近一分钟内,最消耗CPU的会话; 3、查找最近一分钟内,最消耗I/O的SQL语句; 4、查找最近一分钟内,最消耗资源的SQL语句; ...

ORACLE 10G 官方文档演示:查找手工建库语句

原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任。 深蓝的blog:   至此,通过10G的官方文档,查找到了手工建库所需的相关语句。...

oracle的SQL语句执行效率问题查找与解决方法

1.   利用V_$SQLAREA视图提供了执行的细节。(执行、读取磁盘和读取缓冲区的次数)•    数据列EXECUTIONS:执行次数DISK_READS:读盘次数COMMAND_TYPE:命令类...

ORACLE 11G 官方文档演示:查找手工建库语句

原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任。 深蓝的blog:     至此,通过Oracle11G官方文档查找到手工建库语句。...

当要在 Oracle 中之心批量 INSERT、UPDATE 和 DELETE 操作时,可以使用 FORALL 语句。比for loop效率高

==index_name:一个无需声明的标识符,作为集合下标使用; ==sql_statement:静态语句,例如:UPDATE或者DELETE;或者动态(EXECUTE IMMEDIATE)DML...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Oracle脚本】查找Oracle高消耗语句
举报原因:
原因补充:

(最多只允许输入30个字)