oracle 中如何定位重要(消耗资源多)的SQL

来源:互联网 发布:360云计算 编辑:程序博客网 时间:2024/05/11 03:17

链接:http://www.xifenfei.com/699.html

标题:oracle 中如何定位重要(消耗资源多)的SQL

作者:惜分飞©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]

1、查看值得怀疑的SQL

select substr(to_char(s.pct,'99.00'),2)||'%'load,
       s.executions executes,
       p.sql_text
from(selectaddress,
               disk_reads,
               executions,
               pct,
               rank()over(orderby disk_reads desc) ranking
         from(selectaddress,
                       disk_reads,
                       executions,
                      100*ratio_to_report(disk_reads)over() pct
                 fromsys.v_$sql
                wherecommand_type!=47)
        wheredisk_reads>50*executions) s,
       sys.v_$sqltext p
where s.ranking<=5
  andp.address=s.address
order by 1, s.address, p.piece;

2、查看消耗内存多的sql

select b.username,
       a. buffer_gets,
       a.executions,
       a.disk_reads / decode(a.executions, 0, 1, a.executions),
       a.sql_text SQL
  fromv$sqlarea a, dba_users b
 wherea.parsing_user_id = b.user_id
   anda.disk_reads > 10000
 orderby disk_reads desc;

3、查看逻辑读多的SQL

select*
from(selectbuffer_gets, sql_text
         fromv$sqlarea
        wherebuffer_gets>500000
        orderby buffer_gets desc)
where rownum<=30;

4、查看执行次数多的SQL

select sql_text, executions
  from(select sql_text, executions from v$sqlarea order by executions desc)
 whererownum < 81;

5、查看读硬盘多的SQL

select sql_text, disk_reads
from(selectsql_text, disk_reads fromv$sqlarea order by disk_reads desc)
where rownum<21;

6、查看排序多的SQL

select sql_text, sorts
from(selectsql_text, sorts fromv$sqlarea order by sorts desc)
where rownum<21;

7、分析的次数太多,执行的次数太少,要用绑变量的方法来写sql

select substr(sql_text, 1, 80) "sql",count(*), sum(executions)"totexecs"
  fromv$sqlarea
 whereexecutions < 5
 groupby substr(sql_text, 1, 80)
having count(*) > 30
 orderby 2;