(2)GATHER_SCHEMA_STATS 存储过程

这个存储过程用于对某个用户下所有的对象进行分析。如果你的数据用户对象非常多,单独对每个对象进行分析设定会非常不方便,这个存储过程就很方便。 它的好处在于如果需要分析的对象非常多,将可以大大降低DBA的工作量,不足之处是所有分析使用相同的分析策略,可能会导致分析不是最优。 所以要根据实际情况来决定。

 

该存储过程参数如下:

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);


(3)DBMS_STATS.GATHER_INDEX_STATS 存储过程

该存储过程用于对索引的分析,如果我们在使用DBMS_STATS.GATHER_TABLES_STATS的分析时设置参数cascade=>true。 那么Oracle会同时执行这个存储过程来对索引进行分析。

存储过程参数:

DBMS_STATS.GATHER_INDEX_STATS (

ownname          VARCHAR2,

indname          VARCHAR2,

partname         VARCHAR2 DEFAULT NULL,

estimate_percent NUMBER   DEFAULT to_estimate_percent_type

(GET_PARAM('ESTIMATE_PERCENT')),

stattab          VARCHAR2 DEFAULT NULL,

statid           VARCHAR2 DEFAULT NULL,

statown          VARCHAR2 DEFAULT NULL,

degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),

granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),

no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type

(GET_PARAM('NO_INVALIDATE')),

force            BOOLEAN DEFAULT FALSE);

 

上面讨论了三个常用的存储过程。 分析对CBO 来说非常重要,如果不能按照自己的系统指定出切合实际的数据分析方案,可能会导致如下问题的发生:

(1)分析信息不充分导致CBO 产生错误的执行计划,导致SQL执行效率低下。

(2)过多的分析工具带来系统性能的严重下降。