Oracle 10g 升级到 11g 后部分页面非常慢

[复制链接]
查看11 | 回复9 | 2013-2-25 14:51:24 | 显示全部楼层 |阅读模式
系统从10g升级到11g后的头两天,用户发现有几个页面非常慢,从日志中看到,最慢的将近2个小时。马上查看代码发现两个页面使用到了两个很大的view,然后就做了些代码修改,测试通过。但是其中一个页面调查了很久都没有发现问题。
简化的代码如下(系统全部使用存储过程):
Store procedure 1:
select colA, functionA(cloB) as cloB from tableA;
functionA:
select count(1) from viewA,viewB where ....;
Store procedure A:
insert applog....;
sqlStr := 'select tableID from viewA,viewB where ....';
open cursor for sqlStr
loop
--这里做一些string的append
end loop;
close cursor;
insert applog....;
问题:
Store procedure 1 大概需要5到10秒, 但是Store procedure 2,在日志中发现平均需要1400秒,而在AWR报告中大概要4000左右,而我们在sqlplus上跑也只是5到10秒左右,哪位大虾能指引一下?


回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
用GRID CONTROL(OEM)吧
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
那些在11gR2中可能惹祸的新特性,一张列表帮助你摆脱升级11gR2带来的烦恼
http://www.askmaclean.com/archives/11gr2-features-disable.html
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
这个问题最近pub里谈论的不少了,先比较下两周的执行计划看看差距在什么地方
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层



回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
AWR看一下,最耗性能的事务,是哪个,应该能招到具体的SQL语句。然后看一下执行计划,和原10g中比较一下,再进一步优化,再运行试试,看效果怎么样
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
在10g上的执行计划是大概4700左右而在11g大概是4500左右,其实最大的问题是为什么在sqlplus上运行它并不慢,如果非要找出在sqlplus上运行有什么不同,那就是在程序中用到了oper cursor 而在sqlplus直接跑select
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
大家好,经过一段时间的调查(因为是银行系统,过程比较漫长复杂),最终发现是11g的optimizer选择的执行计划并不稳定,在sql developer/sqlplus上选择的执行计划对某个表是走index的,但是在application中又选择了full table scan(大概有16万的data,以至于在nested loop中产生的很大的buffer get,总的buffer get是67m,而走index的是0.5m左右),最终的解决方案是加hint去强制optimizer选择走index。
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
dengjoy 发表于 2013-2-7 11:15
上次9升11,我碰到的是生成执行计划非常慢,执行速度正常(非常长的SQL),用optimizer_features_enable解决 ...

看来oracle 11g的optimizer还真的有点问题
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
kelwenQ 发表于 2013-2-26 22:07
大家好,经过一段时间的调查(因为是银行系统,过程比较漫长复杂),最终发现是11g的optimizer选择的执行计 ...

库升级后系统变慢的问题,我见到的都是找到sql加hint解决的。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行