在查看部分视图中,有时要等很长时间才能出来结果,例如:
案例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
案例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/