在实际的应用中,假如数据库存在大量的SQL硬解析,性能方面常常会出现很大的问题。如果设置参数cursor_sharing=similar来解决硬解析问题,又会面对Oracle 10g在自动收集统计值时会默认收集histogram的问题。下面我们来介绍一个具体的解决方法。
示例:
注释:修改默认收集模式,依然使用Oracle 10g自动收集统计值的功能。
exec dbms_stats.set_param('method_opt','for columns null'); |
DBMS_STATS.GATHER_TABLE_STATS的语法如下:
DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2, estimate_percent NUMBER, block_sample BOOLEAN, method_opt VARCHAR2, degree NUMBER, granularity VARCHAR2, cascade BOOLEAN, stattab VARCHAR2, statid VARCHAR2, statown VARCHAR2, no_invalidate BOOLEAN, force BOOLEAN);
参数说明:
ownname:要分析表的拥有者
tabname:要分析的表名.
partname:分区的名字,只对分区表或分区索引有用.
estimate_percent:采样行的百分比,取值范围[0.000001,100],null为全部分析,不采样. 常量:DBMS_STATS.AUTO_SAMPLE_SIZE是默认值,由oracle决定最佳取采样值.
block_sapmple:是否用块采样代替行采样.
method_opt:决定histograms信息是怎样被统计的.method_opt的取值如下:
for all columns:统计所有列的histograms.
for all indexed columns:统计所有indexed列的histograms.
for all hidden columns:统计你看不到列的histograms
for columns SIZE | REPEAT | AUTO | SKEWONLY:统计指定列的histograms.N的取值范围[1,254]; REPEAT上次统计过的histograms;AUTO由oracle决定N的大小;SKEWONLY multiple end-points with the same value which is what we define by "there is skew in the data
degree:决定并行度.默认值为null.
granularity:Granularity of statistics to collect ,only pertinent if the table is partitioned.
cascace:是收集索引的信息.默认为falase.
stattab指定要存储统计信息的表,statid如果多个表的统计信息存储在同一个stattab中用于进行区分.statown存储统计信息表的拥有者.以上三个参数若不指定,统计信息会直接更新到数据字典.
no_invalidate: Does not invalidate the dependent cursors if set to TRUE. The procedure invalidates the dependent cursors immediately if set to FALSE.
force:即使表锁住了也收集统计信息.
例子:
execute dbms_stats.gather_table_stats(ownname => 'owner',tabname => 'table_name' ,estimate_percent => null ,method_opt => 'for all indexed columns' ,cascade => true);
HWM --high water mark
important:
1, Deallocate free space below HWM may be improve the FULL TABLE SCAN speed .
2, defrag fraction chained/migrate rows maybe improve the FULL TABLE SCAN speed and index scan speed.
1, 增加空闲空间( above HWM are allocate)
IT DOES NOT ADD TABLE SCAN COST. AND DO NOT TAKE INTO ACCOUNT TO THE STATISTICS OF BLOCKS COLUMN OF USER_TABLES.
alter table t allocate extent (size 10m datafile 'c:test01.dbf');
1, 释放空闲空间( ONLY above HWM are deallocate)
alter table t deallocate unused ;
2,收缩表. 释放空闲空间(HWM).
alter table t enable row movement ;
alter table t shrink space;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/350519/viewspace-1039829/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/350519/viewspace-1039829/