oracle提供了很多工具来查找最低效的SQL,但是,本质上就是通过如下SQL语句,从相关系统视图中获取最低效的SQL:
select rownum as rank, a.*
from (select PARSING_SCHEMA_NAME RUN_USER, --执行用户
SQL_FULLTEXT, --SQL文本,全,带格式
sql_text, --SQL文本前面部分
elapsed_Time , --单位是微秒,语句执行完的总时间,包括CPU时间和等待时间
cpu_time , --CPU时间,语句运行的时间
elapsed_Time - cpu_time wait_time,
trunc((elapsed_Time - cpu_time)*100/elapsed_Time,2) "wait_time_per%",--等待时间所占百分比
executions, --执行次数
elapsed_Time/(executions+1) Per_Time, --每次执行平均时间,
buffer_gets, --
disk_reads, --磁盘读
hash_value, --SQL的hash_value,以备获取完整SQL
USER_IO_WAIT_TIME,
SORTS --排序次数
from v$sqlarea t
where elapsed_time > 20000 and PARSING_SCHEMA_NAME<>'SYS'
order by elapsed_time desc) a
where rownum < 21
order by elapsed_time desc
Responsce time = service time + wait time
一个操作的响应时间 = 必要的服务(计算)时间 + 各种等待时间
而在V$SQL中
elapsed_time 代表了执行完毕的时间 , 也就是响应时间,response time,
而cpu_time 代表了执行时消耗的CPU 时间,也就是计算时间,服务时间,service time
所以
elapsed_time = cpu_time + wait_time
有时候可以通过这两个值的差来衡量这个SQL的wait Time.
当然,有时候可能关心elapsed_time ,有时候则关心cpu_time ,也有时候关心wait Time,取决于实际需求。
这个SQL,务必保存,掌握这些SQL,比使图形化工具,要高效方便的多得多![@more@]
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24237320/viewspace-1059095/,如需转载,请注明出处,否则将追究法律责任。