ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一次V$access的调优经历

一次V$access的调优经历

原创 Linux操作系统 作者:lucy_lxy 时间:2012-05-18 11:32:03 0 删除 编辑

某企业最近新进一台小型机,AIX 6100系统,Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production,在测试的过程中发现某模块比老服务器慢了很多。老服务器为普通微机服务器,windows 2003 Oracle 8.1.7。问清了其他功能速度还可以,联想到该企业程序比较特殊,于是运行ASR报告,试图查看问题所在。可是报告似乎没显示什么有价值的信息,只显示了2条问题SQL,第一条是访问sys.v_$session v_$access 视图,以为这是系统后台进程所用的SQL(再次教育我们千万不要想当然),第二条也没什么价值。PL/SQL里面显示的是一个在进入运算前检查冲突的过程,并不是真正耗费时间的过程。ADDM 报告显示的则似乎是CPU的问题:

CPU + Wait for CPU

CPU

98.34

0.99

 

可是新服务器是16CPU的!

  怀疑新安装的Oracle存在问题,对照Oracle安装手册,修改和检查Oracle用户的设置和系统信号量的设置。修改soft real memory size 的大小为-1,系统信号量满足手册上的需要。soft real memory sizesmit chuser图形界面中显示为RSS,查看命令手册中chuser发现在etc/security/limits文件中有相应解释和该参数的设置。

查看Oracle参数statistics_level timed_statistics,也都正常。可是为什么就抓取不到问题SQL呢?

不甘心继续查找问题PL/SQL,赫然发现该过程调用了一条访问sys.v_$session v_$access 视图的语句,和ASR报告中显示的对比了一下,可不就是元凶么。拿出来单独执行,发现访问v_$access的时候速度巨慢,老服务器3秒就出来了,但是新服务器却用了180多秒。这可是系统的动态视图,按理不应该啊。v_$access视图是用来查询library cache 中当前没有age out出去的对象的,其底层视图为:

create or replace view v_$access as

select "SID","OWNER","OBJECT","TYPE" from v$access;

 

catalog.sql中的创建语句为:

create or replace view v_$access as select * from v$access;

create or replace public synonym v$access for v_$access;

grant select on v_$access to select_catalog_role;

 

查看其执行计划,发现是在merge join cartesian处花费的时间最多,加上object owner的限制条件也不见改善,决定加上/*+rule */hint,果然速度快过了旧服务器,yeah!

继续查找,发现rollingpig说关于v$access的性能问题遇到过好几次了,还有人说执行下exec dbms_stats.gather_fixed_objects_stats; 收集下fixed table 的统计信息即可。继续测试,执行该过程后,执行问题SQL,刷的一下就出来了。去除存储过程中的/*+rule */ hint ,开始似乎还是慢,于是在存储过程中的问题SQL加上object owner的限制条件,3秒钟完事了。至此问题解决。

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7177735/viewspace-730125/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-09-27

  • 博文量
    124
  • 访问量
    334973