oracledbms_stats统计信息管理(五)

2015-03-04 17:07:26 · 作者: · 浏览: 120
---- ------ ------ ------------------ ---------- OWNER VARCHAR2(30) NO NO OBJECT_NAME VARCHAR2(128) NO NO SUBOBJECT_NAME VARCHAR2(30) NO NO OBJECT_ID NUMBER(22) NO NO DATA_OBJECT_ID NUMBER(22) NO NO OBJECT_TYPE VARCHAR2(19) NO NO CREATED DATE NO NO LAST_DDL_TIME DATE NO NO TIMESTAMP VARCHAR2(19) NO NO STATUS VARCHAR2(7) NO NO TEMPORARY VARCHAR2(1) NO NO GENERATED VARCHAR2(1) NO NO SECONDARY VARCHAR2(1) NO NO NAMESPACE NUMBER(22) NO NO EDITION_NAME VARCHAR2(30) NO NO B Average Average Index Tree Leaf Distinct Number Leaf Blocks Data Blocks Cluster Global User Sample Name Unique Level Blks Keys of Rows Per Key Per Key Factor Stats Stats Size --------------- --------- ----- ---- -------------- ------------------ ----------- ----------- ------------ ------ ------ ------------------ Date MM-DD-YYYY ---------- INDEX_01 NONUNIQUE NO NO Index Column Col Column Name Name Pos Details --------------- ------------------------- ---- ------------------------ INDEX_01 OBJECT_ID 1 NUMBER(22) Select Table_Name,Partition_Name,High_Value,Partition_Position,Tablespace_Name,Num_Rows From dba_Tab_Partitions where TABLE_NAME='USEROPERATELOG'; 这是对命令与工具包的一些总结 1、对于分区表,建议使用DBMS_STATS,而不是使用Analyze语句。 a) 可以并行进行,对多个用户,多个Table b) 可以得到整个分区表的数据和单个分区的数据。 c) 可以在不同级别上Compute Statistics:单个分区,子分区,全表,所有分区 d) 可以倒出统计信息 e) 可以用户自动收集统计信息 2、DBMS_STATS的缺点 a) 不能Validate Structure b) 不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的信息,这两个仍旧需要使用Analyze语句。 c) DBMS_STATS 默认不对索引进行Analyze,因为默认Cascade是False,需要手工指定为True 3、对于oracle 9里面的External Table,Analyze不能使用,只能使用DBMS_STATS来收集信息。 -----------2.gather_schema_stats dbms_stats能良好地估量统计数据(尤其是针对较大的分区表),并能取得更好的统计后果, 最终制订出速度更快的SQL施行计划。   exec dbms_stats.gather_schema_stats(   ownname =>
'SCOTT',   options => 'GATHER AUTO',   estimate_percent => dbms_stats.auto_sample_size,   method_opt => 'for all columns size repeat',   degree => 15   ) 为了充沛认识dbms_stats的益处,需要仔细领会每一条次要的预编译指令(directive)。上面让咱们钻研每一条指令 ,并领会如何用它为基于代价的SQL优化器搜罗最高品质的统计数据。   options参数   使用4个预设的法子之一,这个选项能把握Oracle统计的刷新方法:   gather――重新剖析整个架构(Schema)。   gather empty――只剖析目前还没有统计的表。   gather stale――只重新剖析修改量超过10%的表(这些修改包含拔出、更新和删除)。   gather auto――重新剖析以后没有统计的对象,以及统计数据过期(变脏)的对象。 注意,使用gather auto相似于组合使用gather stale和gather empty。   注意,不论gather stale仍是gather auto,都请求进行监视。假如你施行一个alter table xxx monitoring命令, Oracle会用dba_tab_modifications视图来跟踪发生发火变动的表。这样一来,你就确实地知道,自从上一次剖析统计数据以来,发生发火了多少次拔出、更新和删除操作。   estimate_percent选项   estimate_percent参数是一种比照新的设计,它答应Oracle的dbms_stats在搜罗统计数据时,自动估量要采样的 一个segment的最佳百分比:   estimate_percent => dbms_stats.auto_sample_size   要考证自动统计采样的准确性,你可检视dba_tables sample_size列。一个有趣的地方是,在使用自动采样时, Oracle会为一个样本尺寸挑选5到20的百分比。记住,统计数据品质越好,CBO做出的抉择越好。   method_opt选项   method_opt:for table --只统计表   for all indexed columns --只统计有索引的表列   for all indexes --只剖析统计相干索引   for all columns   dbms_stats的method_opt参数尤其合适在表和索引数据发生发火变动时刷新统计数据。method_opt参数也 合适用于判断哪些列需要直方图(histograms)。   某些情形下,索引内的各个值的散播会影响CBO是使用一个索引仍是施行一次全表扫描的决议计划。例如, 假如在where子句中指定的值的数量不合错误称,全表扫描就显得比索引走访更经济。   假如你有一个高度歪斜的索引(某些值的行数不合错误称),就可创建Oracle直方图统计。但在现实世界