请教各位大师:如何查看到效率低的SQL?

[复制链接]
查看11 | 回复8 | 2013-7-31 12:37:26 | 显示全部楼层 |阅读模式
效率低的原因有很多:没有统计信息或统计信息陈旧、没有可用的索引等。虽然awr等工具,但还是有点麻烦,有没有动态性能视图之类的东东可以查看呢?

回复

使用道具 举报

千问 | 2013-7-31 12:37:26 | 显示全部楼层
呵呵,如果awr你都觉得麻烦,估计就没其他更省劲儿的方法了。
回复

使用道具 举报

千问 | 2013-7-31 12:37:26 | 显示全部楼层
给你一个脚本,lz真懒啊,脚本导出都是
--diskread
SELECT *
FROM (SELECT a.inst_id,

b.sid,

b.username,

b.event,

b.osuser,

a.parsing_schema_name,

a.SQL_ID,

a.LAST_ACTIVE_TIME,

a.DISK_READS,a.DIRECT_WRITES,

a.BUFFER_GETS,a.EXECUTIONS,

a.elapsed_time/1000000,

a.disk_reads

/ DECODE (a.executions, 0, 1, a.executions) rds_exec_ratio,

a.sql_text STATEMENT,

b.last_call_et

FROM gv$sql a,gv$session b

where a.sql_id = b.sql_id

and a.inst_id = b.inst_id

--and b.username = 'IASYS'

and b.status = 'ACTIVE'

ORDER BY rds_exec_ratio DESC)
WHERE ROWNUM < 50
ORDER BY rds_exec_ratio DESC ;
回复

使用道具 举报

千问 | 2013-7-31 12:37:26 | 显示全部楼层
yellowlee 发表于 2014-11-7 11:22
给你一个脚本,lz真懒啊,脚本导出都是
--diskread

这个脚本找出的是磁盘读最多的前49条SQL吧?
回复

使用道具 举报

千问 | 2013-7-31 12:37:26 | 显示全部楼层
bfc99 发表于 2014-11-7 11:32
这个脚本找出的是磁盘读最多的前49条SQL吧?

好眼力。
回复

使用道具 举报

千问 | 2013-7-31 12:37:26 | 显示全部楼层
SELECT *
FROM (SELECT Substr(a.sql_text,1,50) sql_text,

Trunc(a.disk_reads/Decode(a.executions,0,1,a.executions)) reads_per_execution,

a.buffer_gets,

a.disk_reads,

a.executions,

a.sorts,

a.address
FROM v$sqlarea a
ORDER BY 2 DESC)
WHERErownum <= &&1;
参考一下。
回复

使用道具 举报

千问 | 2013-7-31 12:37:26 | 显示全部楼层
磁盘读高并不一定是sql问题啊。如果select一个很大的table,第一次读肯定会有很多磁盘读的啊。
回复

使用道具 举报

千问 | 2013-7-31 12:37:26 | 显示全部楼层
土豆X 发表于 2014-11-7 14:09
磁盘读高并不一定是sql问题啊。如果select一个很大的table,第一次读肯定会有很多磁盘读的啊。

问,你认为哪些SQL为低效SQL? 或者说,低效SQL的标准是什么?
回复

使用道具 举报

千问 | 2013-7-31 12:37:26 | 显示全部楼层
在cache buffer层面,低效sql一般是逻辑读,物理读,执行次数过多
在share pool层面,低效sql一般是硬解析,软解析,相同版本的sql过多
在log buffer层面,低效sql一般是提交次数过多
低效sql使用v$sql,v$session,v$session_wait,v$process,x$bh,dba_segments,dba_extents联合查询可以得到
语句网上一搜,有很多。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行