oracle10g中部分视图查询非常‘慢“问题解决

      在查看部分视图中,有时要等很长时间才能出来结果,例如:

              案例1:
                       SQL>select distinct owner from v$access;
                        
                                   Elapsed: 00:02:43.51
            
                案例2:
                         SQL>select *  from dba_extents
                                  where file_id = 6 and 3348 between block_id and
                                  block_id + blocks - 1
                
                            Elapsed: 00:00:24.45

          造成该原因的是fixed table没有进行统计分析,具体步骤如下:

             1、通过以下脚本进行确认:

                      SQL> select VIEW_DEFINITION from
                                  v$fixed_view_definition
                                  where view_name='GV$ACCESS';
                   
                             使用 x$ksuse ,x$kglob , x$kgldp ,x$kgllk
       
                        SQL>select dbms_metadata.get_ddl('VIEW', 'DBA_EXTENTS')
                                   from dual;
 
                              其中使用了 x$ktfbue       

             2、查看是否fixed table是否进行统计分析
                   
                          SQL>select count(*) from sys.tab_stats$;
                                      COUNT(*)
                                      ----------
                                           0
                        说明:未进行统计分析

             3、执行统计分析
                           SQL>connect /as sysdba
                           SQL> exec dbms_stats.gather_fixed_objects_stats(null);
                            SQL>select count(*) from sys.tab_stats$;
                                        COUNT(*)
                                         ----------
                                              579
              4、查看以上的fixed table是否都已经被统计分析
                         
                           SQL>select num_rows, last_analyzed from user_tab_statistics
                                      where table_name = 'X$KTFBUE';

                                     NUM_ROWS LAST_ANAL
                                          ---------- ---------
                
                             SQL>select num_rows, last_analyzed from user_tab_statistics
                                          where table_name = 'X$KGLDP';

                                         NUM_ROWS LAST_ANAL
-                                        --------- ---------
                                                868 14-JUN-09
                        
                             说明: 发觉X$KTFBUE并未进行统计分析,造成该问题的主要
                                          原因是oracle10g BUG 5259025

             5
需要单独对这张fixed_table进行统计分析
                             
                             SQL>exec DBMS_STATS.GATHER_TABLE_STATS
                                         ('SYS', 'X$KTFBUE');
                                  
                             
SQL>select num_rows, last_analyzed
                                         from user_tab_statistics
                                         where table_name = 'X$KTFBUE';

                                          NUM_ROWS LAST_ANAL
                                          ---------- ---------
                                            4186        14-JUN-09 

          重新测试:
       
           SQL>select /*+ gather_plan_statistics */ distinct owner from v$access;

                        Elapsed: 00:00:00.05
                        从2分多提高到不到1秒
 
          
SQL>select *  from dba_extents
                        where file_id = 6 and 3348 between block_id and
                        block_id + blocks - 1

                        Elapsed: 00:00:02.59
                        从24秒提高到3秒

备注:
       1、 查看具体执行计划:
              SQL>select sid, sql_id from v$session where xxxxxxx
              SQL>set serveroutput on size 1000000
              SQL>select * from
                        dbms_xplan.display_cursor('SQL_ID', '0', 'ALL ALLSTATS'))
         2、Bug  
5259025请参看metalink.oracle.com

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

转载于:http://blog.itpub.net/354732/viewspace-606217/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值