dbms_stats 包是 oracle 9i 之后用来收集统计 oracle 相关信息的包, 虽然 analyze 命令也可以实现类似功能, 但 oracle 还是推荐使用 dbms_stats 包, 最主要的原因 dbms_stats 包能够收集正确的分区表的统计信息, 因为 analyze 命令只能在最低级上收集统计信息, 而高级的统计信息是通过低级的统计信息汇总以及推导出来的. 此外, dbms_stats 包收集的统计信息可以被 CBO 优化器使用, 对于能否制定准确高效的执行计划至关重要.
下面介绍 Oracle 11g 中常用的几个方法
1. 收集 schema 统计信息
DBMS_STATS.GATHER_SCHEMA_STATS ( ownname VARCHAR2, estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param('ESTIMATE_PERCENT')), block_sample BOOLEAN DEFAULT FALSE, method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'), degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, options VARCHAR2 DEFAULT 'GATHER', objlist OUT ObjectTab, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE, obj_filter_list ObjectTab DEFAULT NULL );
method_opt(收集直方图的策略):
for all [indexed | hidden] columns size [integer | repeat | auto | skewonly]