V$SQLAREA中一条TOP SQL的分析

[复制链接]
查看11 | 回复4 | 2008-1-2 17:35:53 | 显示全部楼层 |阅读模式
ORACLE 9208
v$sqlarea中 buffer_gets 和 disk_reads较高的一条SQL:
SELECT SNAME,CTYPE,CNUMBER FROM F_IND WHERE BUSINESSRE = :B1;
该语句在一循环中执行,循环记录数平均每天400万左右,F_IND表上唯一索引列为BUSINESSRE,记录数约为1700万;
问题:

1、为什么EXECUTIONS达到30355210次,V$SQLAREA中保留的是多久以来的数据,是否不只一天的执行次数? 如果用 DISK_READS/EXECUTIONS得到的平均值不是很大,是否代表不需要太关注这个SQL?

2、DISK_READS大,说明数据块不存在数据缓冲区中,缓冲数据应该是被其他程序冲掉了,单纯增大缓冲区大小应该没有用的,有没有办法使其不被冲掉?

3、BUFFER_GETS也大,说明SQL执行效率低?BUFFER_GETS/EXECUTIONS得到的平均值不是很大,是否也不需要太关注?
附件中是 V$SQLAREA的详细内容,请指教
[ 本帖最后由 dege 于 2009-2-24 17:23 编辑 ]
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
为什么要循环执行????
不用批处理
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
1、为什么EXECUTIONS达到30355210次,V$SQLAREA中保留的是多久以来的数据,是否不只一天的执行次数? 如果用 DISK_READS/EXECUTIONS得到的平均值不是很大,是否代表不需要太关注这个SQL?
EXECUTIONS 运行以直来的次数, 还有共用.
2、DISK_READS大,说明数据块不存在数据缓冲区中,缓冲数据应该是被其他程序冲掉了,单纯增大缓冲区大小应该没有用的,有没有办法使其不被冲掉?
把它方到保留池. 也就是数据缓冲区里开设个保留区.
3、BUFFER_GETS也大,说明SQL执行效率低?BUFFER_GETS/EXECUTIONS得到的平均值不是很大,是否也不需要太关注?
请教它人!
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
原帖由 棉花糖ONE 于 2009-2-24 17:24 发表
为什么要循环执行????
不用批处理

业务需要,根据外层表数据循环处理
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
原帖由 zengmuansha 于 2009-2-24 17:29 发表
1、为什么EXECUTIONS达到30355210次,V$SQLAREA中保留的是多久以来的数据,是否不只一天的执行次数? 如果用 DISK_READS/EXECUTIONS得到的平均值不是很大,是否代表不需要太关注这个SQL?
EXECUTIONS 运行以直来的次数, 还有共用.
2、DISK_READS大,说明数据块不存在数据缓冲区中,缓冲数据应该是被其他程序冲掉了,单纯增大缓冲区大小应该没有用的,有没有办法使其不被冲掉?
把它方到保留池. 也就是数据缓冲区里开设个保留区.
3、BUFFER_GETS也大,说明SQL执行效率低?BUFFER_GETS/EXECUTIONS得到的平均值不是很大,是否也不需要太关注?
请教它人!

谢谢,我去查下保留区如何使用,如有不明白,还得请教您
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行