ORACLE抓低效的SQL语句[通俗易懂]

ORACLE抓低效的SQL语句[通俗易懂]ORACLE抓低效的SQL语句 转载 ORACLE_FANS 发布于2013-01-19 00:59:14 阅读数 1996 收藏 展开 信息系统访问量又不大,瓶颈一般不会出现在应用层,极有可能在数…

ORACLE抓低效的SQL语句

转载
ORACLE_FANS 发布于2013-01-19 00:59:14 阅读数 1996 收藏
展开

    信息系统访问量又不大,瓶颈一般不会出现在应用层,极有可能在数据库这一层,不用急着看程序。先找出逻辑读取次数最多的SQL,硬盘读取次数最多的SQL,找到SQL,对于SQL进行优化。看看有没有发生全表扫描的地方。

一般发生全表扫描,极有可能是没有建立合理的索引,或者索引由于左边引用函数或其它原因造成索引失效。

对于运行一年多的系统,最好要自己写一个自动重建索引的程序,定时重建索引。

或者使用TOAD工具帮你重建索引。

另外在看一下数据库的CPU占用率,如果占用率在经常在80%-100%,那一定要是SQL或存储过程及trigger中写的不好。

不需要从应用层找SQL,方向性错误,太累,也看不出效果。

而应当使用pl/SQL, toad等工具,分析出最bad的SQL语句,一看到这些语句后,再修改应用层的查询就是了。又快又方便。

— 逻辑读多的SQL

select * from (select buffer_gets, sql_text

from v$sqlarea

where buffer_gets > 500000

order by buffer_gets desc) where rownum<=30;

— 执行次数多的SQL   

  select sql_text,executions from

  (select sql_text,executions from v$sqlarea order by executions desc)

   where rownum<81;

— 读硬盘多的SQL 

  select sql_text,disk_reads from

  (select sql_text,disk_reads from v$sqlarea order by disk_reads desc)

   where rownum<21;    

— 排序多的SQL   

  select sql_text,sorts from

   (select sql_text,sorts from v$sqlarea order by sorts desc)

    where rownum<21;           

 

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

set pagesize 600;

set linesize 120;

select substr(sql_text,1,80) “sql”, count(*), sum(executions) “totexecs”

   from v$sqlarea

   where executions < 5

   group by substr(sql_text,1,80)

   having count(*) > 30

   order by 2;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10469.html

(0)
上一篇 2022-12-27
下一篇 2022-12-27

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注