Oracle 11g收集各种统计信息(DBMS_STAT)

说明:本文为Oracle11g收集各种统计信息(DBMS_STAT)的简要指导手册
温馨提示:如果您发现本文哪里写的有问题或者有更好的写法请留言或私信我进行修改优化

● analyze始于Oracle7,但自从Oracle8.1.5引入dbms_stats包后,Oracle便推荐使用dbms_stats取代analyze
● 官网地址

https://docs.oracle.com/cd/E11882_01/server.112/e41573/stats.htm#PFGRF003
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS059

● 常用参数说明

参数名称		          说明
ownname			  USER_NAME
tabname			  TABLE_NAME
partname		  分区表的某个分区名
estimate_percent          采样百分比,有效范围为[0.000001,100](默认Oracle自动确定适当的样本量以获得良好的统计数据)
block_sample    	  使用随机块采样代替随机行采样
options                   分析模式
			   ①gather:重新分析整个架构
			   ②gather empty:只分析目前还没有统计的表
			   ③gather stale:只重新分析修改量超过10%的表(包括插入、更新和删除)
			   ④gather auto:重新分析当前没有统计的对象,以及统计数据过期(变脏)的对象。使用gather auto类似于组合使用gather stale和gather empty
method_opt		  抽样方法
			   ①for table:只统计表
			   ②for all indexed columns:只统计有索引的表列
			   ③for all indexes:只分析统计相关索引
			   ④for all columns:分析所有的列
                           ⑤for all hidden columns:分析所有隐藏列(函数索引等)
cascade			  是否收集此表索引的统计信息
degree			  并行处理的cpu数量
granularity		  要收集的统计信息的粒度(仅在表已分区时才相关)
			   ①'AUTO'-根据分区类型确定粒度。这是默认值。
			   ②'ALL' -收集所有(子分区,分区和全局)统计信息
			   ③'GLOBAL' -收集全球统计数据
			   ④'GLOBAL AND PARTITION'-收集全局和分区级别的统计信息。即使它是一个复合分区对象,也不会收集任何子分区级别统计信息。
			   ⑤'PARTITION '-收集分区级别的统计信息
			   ⑥'SUBPARTITION' -收集子分区级别的统计信息
			   ⑦'DEFAULT'-收集全局和分区级别的统计信息。该选项已过时,并且当前受支持,但仅出于遗留原因才包含在文档中。您应该使用“ GLOBAL AND PARTITION”来实现此功能。请注意,默认值现在是' AUTO'。
stattab			  用户统计信息表标识符,用于描述将当前统计信息保存在何处
statown			  包含的架构stattab(如果不同于ownname)
statid			  标识符(可选),用于与这些统计信息关联 stattab
no_invalidate	          如果设置为TRUE,则不使从属游标无效。如果设置为FALSE,则该过程将立即使从属游标无效。默认Oracle自己决定何时使依赖的游标无效。
stattype		  统计信息类型。允许的唯一值是DATA。
force			  收集表的统计信息(即使已锁定)

● 收集“表/表+索引”的统计信息(支持分区表)

》》常用语句:
exec dbms_stats.gather_table_stats(ownname => 'SCOTT',tabname => 'EMP',method_opt=> 'for all columns',estimate_percent => '100',degree=>'8',granularity=>'all',cascade=>TRUE);
》》存储过程详情:
DBMS_STATS.GATHER_TABLE_STATS (
   ownname          VARCHAR2, 
   tabname          VARCHAR2, 
   partname         VARCHAR2 DEFAULT NULL,
   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,
   statown          VARCHAR2 DEFAULT NULL,
   no_invalidate    BOOLEAN  DEFAULT  to_no_invalidate_type (get_param('NO_INVALIDATE')),
   stattype         VARCHAR2 DEFAULT 'DATA',
   force            BOOLEAN  DEFAULT FALSE);
》》官网说明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68582

● 收集“索引”的统计信息

》》常用语句:
exec dbms_stats.gather_index_stats(ownname => 'SCOTT',indname => 'PK_EMP',estimate_percent => '100',degree => '4');
》》存储过程详情:
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);
》》官网说明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68575

● 收集“用户”的统计信息

》》常用语句:
exec dbms_stats.gather_schema_stats(ownname=>'SCOTT',degree=>8,cascade=>true,granularity=>'ALL');
》》存储过程详情:
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);
》》官网说明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68577


● 收集“全库”的统计信息(非常慢)

》》常用语句:
exec dbms_stats.gather_database_stats(degree=>4,block_sample=>true,estimate_percent =>'10',cascade=>true,granularity=>'ALL');
》》存储过程详情:
DBMS_STATS.GATHER_DATABASE_STATS (
   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,
   gather_sys       BOOLEAN  DEFAULT TRUE,
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (get_param('NO_INVALIDATE')),
   obj_filter_list ObjectTab DEFAULT NULL);
》》官网说明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68569


● 收集“数据字典”的统计信息(速度较慢)

》》常用语句:
exec dbms_stats.gather_dictionary_stats();
》》存储过程详情:
DBMS_STATS.GATHER_DICTIONARY_STATS (
   comp_id          VARCHAR2 DEFAULT NULL, 
   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 AUTO', 
   objlist    OUT   ObjectTab,
   statown          VARCHAR2 DEFAULT NULL,
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (get_param('NO_INVALIDATE')),
   obj_filter_list ObjectTab DEFAULT NULL);
》》官网说明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68571

● 收集“固定对象/内部对象”的统计信息(fixed_objects是指:一些x$表及他们的index,他们只是Oracle自定义的内存结构)(速度超慢)

》》常用语句:
exec dbms_stats.gather_fixed_objects_stats();
》》存储过程详情:
DBMS_STATS.GATHER_FIXED_OBJECTS_STATS (
   stattab        VARCHAR2 DEFAULT NULL,
   statid         VARCHAR2 DEFAULT NULL,
   statown        VARCHAR2 DEFAULT NULL, 
   no_invalidate  BOOLEAN  DEFAULT to_no_invalidate_type (get_param('NO_INVALIDATE'))); 
》》官网说明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68573

● 收集“系统”的统计信息(借助于系统统计信息,Oracle可以更清楚地知道目标数据库服务器的实际处理能力)(较快)(Oracle强烈建议您收集系统统计信息)

》》常用语句:
exec dbms_stats.gather_system_stats();
》》存储过程详情:
DBMS_STATS.GATHER_SYSTEM_STATS (
   gathering_mode   VARCHAR2 DEFAULT 'NOWORKLOAD',
   interval         INTEGER  DEFAULT NULL,
   stattab          VARCHAR2 DEFAULT NULL,
   statid           VARCHAR2 DEFAULT NULL,
   statown          VARCHAR2 DEFAULT NULL);
》》官网说明:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68580

over

发布了39 篇原创文章 · 获赞 38 · 访问量 3573

猜你喜欢

转载自blog.csdn.net/zzt_2009/article/details/105402420