Oracle统计信息
Posted 技术小白丁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle统计信息相关的知识,希望对你有一定的参考价值。
Oracle统计信息
统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息。例如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于统计信息。CBO正是根据这些统计信息数据,计算出不同访问路径下,不同join 方式下,各种计划的成本,最后选择出成本最小的计划。
统计信息是存放在数据字典表中的,如tab$,一般可通过察看某些视图来获取统计信息状况,如DBA_TABLES,DBA_INDEXES,DBA_TAB_COL_STATISTICS, DBA_TAB_HISTOGRAMS等。在这些视图中包含表示统计信息的一些字段,这些字段只有搜集过统计信息之后才有值,否则是空的。例如,last_analyzed 字段表示上次统计信息搜集的时间,可以根据这个字段,快速的了解最近一次统计信息搜集的时间。
oracle会按自己的规则自动收集统计信息,但是有时候需要自己手动收集统计信息,比如大规模etl导入数据时。
手动收集信息方式:
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 SIZE AUTO): for all columns:统计所有列 的histograms. for all indexed columns:统计所有indexed列的histograms. for all hidden columns:统计你看不到列的histograms for columns <list> SIZE <N> | REPEAT | AUTO | SKEWONLY:统计指定列的histograms.N的取值范围[1,254];REPEAT上次 统计过的histograms;AUTO由oracle决定N的大小;SKEWONLY 选项会耗费大量处理时间,因为它要检查每个索引中的每个列的值的分布情况。 degree:决定并行度.默认值为null. granularity:Granularity of statistics to collect ,only pertinent if the table is partitioned. cascade:是收集索引的信息.默认为FALSE. 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:即使表锁住了也收集统计信息
以上是关于Oracle统计信息的主要内容,如果未能解决你的问题,请参考以下文章