Oracle统计信息和dbms_stats包

1、统计信息的作用

Oracle基于CBO的优化器在生成执行计划时,很大程度上依赖 于统计信息,你可以把CBO理解为一个复杂的数学模型,而统计信息是它最主要的输入,执行 计划是输出,如果输入都不准确,输出还可能准确吗?所有,统计信息是否及时有效对执行 计划的好坏有着关键的影响。

2、dbms_stats包

Oracle里采用dbms_stats包分 析统计信息(Analyze命令已过时,不建议使用),该包的使用方法,官方文档有详细说明 (http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_stats.htm#i1036461), 这里挑几个最常用的说说。

1) gather_table_stats

DBMS_STATS.GATHER_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
estimate_percent NUMBER DEFAULT NULL,
block_sample BOOLEAN DEFAULT FALSE,
method_opt VARCHAR2 DEFAULT 'FOR ALL COLUMNS SIZE
1',
degree NUMBER DEFAULT NULL,
granularity VARCHAR2 DEFAULT 'DEFAULT',
cascade BOOLEAN DEFAULT FALSE,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE);

这个包最常用,它是对表收集统计信息 ,语法如上所示,它的关键参数如下:

method_opt (直方图histogram选项)

先说说什么是直方图,直方图是对列上的数据分布进行统计,让优化器知道数据在各个列上 的分布情况,如果数据在某列上的分布很倾斜,则最好对该列收集直方图信息。

method_opt有如下选项:

for all columns  -> 统计该表所有列的 直方图

for all indexed columns  -> 统计该表上定义索引列的直方图

for columns <list> SIZE <N> | REPEAT | AUTO | SKEWONLY:N:直方 图桶数,取值范围[1,254],1相当于不收集直方图REPEAT:只收集原本有直方图信息的 列;AUTO:由Oracle自行决定N的大小SKEWONLY: 只收集非均匀分布列的直方图,系统自动决 定桶数(bucket )

示例1:在表t上收集统计信息,但不收集直方图:

exec dbms_stats.gather_table_stats(user,'t',method_opt=>'for all columns size 1');

示例2:以最大桶数收集直方图:

exec dbms_stats.gather_table_stats(user, 't', method_opt=>'for all columns size 254');

granularity (统计信息收集的粒度,针对分区表)该参数 主要针对分区表,分区表有以下三种类型的统计信息global -> 全局统计信息partition -> 分区统计信息sub-partition -> 子分区统计信息cascade (是否同时收集索引的统 计信息)该值为true等同于在该表上所有的索引上执行gather_index_stats。

2) gather_index_stats

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

该函数用于收集索引的统计信息 。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索统计
, invalid method name:
, 分区表
, 信息
, varchar2
, default
直方图
oracle dbms stats、oracle11g dbms stats、dbms stats、sys.dbms stats、oracle index stats,以便于您获取更多的相关知识。

时间: 2024-09-26 18:23:44

Oracle统计信息和dbms_stats包的相关文章

oracle 统计信息收集包:DBMS_STATS

 DBMS_STATS包 DBMS_STAS包不仅能够对表进行分析,它还可以对数据库分析进行管理. 按照功能可以分一下几类: (1)       性能数据的收集 (2)       性能数据的设置 (3)       性能数据的删除 (4)       性能数据的备份和恢   更多信息参考Oracle 联机文档: 11g DBMS_STATS http://download.oracle.com/docs/cd/E11882_01/appdev.112/e10577/d_stats.htm#AR

如何使用analyze命令收集oracle统计信息

ORACLE数据库的PL/SQL语句执行的优化器,有基于代价的优化器(CBO)和基于规则的优化器(RBO). (1)RBO的优化方式,依赖于一套严格的语法规则,只要按照规则写出的语句,不管数据表和索引的内容是否发生变化,不会影响PL/SQL语句的"执行计划". (2)CBO自ORACLE7版被引入,ORACLE自7版以来采用的许多新技术都是只基于CBO的,如星型连接排列查询,哈希连接查询,反向索引,索引表,分区表和并行查询等.CBO计算各种可能"执行计划"的&quo

Oracle的统计信息简介

1.什么是统计信息 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.比如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于统计信息.CBO正是根据这些统计信息数据,计算出不同访问路径下,不同join 方式下,各种计划的成本,最后选择出成本最小的计划. 统计信息是存放在数据字段表中的,如tab$.一般我们从数据字段视图中察看统计信息状况,如DBA_TABLES,DBA_INDEXES,DBA_TAB_COL_STATIS

oracle收集统计信息

什么是统计信息 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.比如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于统计信息.CBO正是根据这些统计信息数据,计算出不同访问路径下,不同join 方式下,各种计划的成本,最后选择出成本最小的计划. 统计信息是存放在数据字段表中的,如dba_tab_statistics 如何搜集统计信息 统计信息搜集也是有多种方法,推荐大家使用DBMS_STATS 表来进行统计信息搜集及

Oracle 12c数据库优化器统计信息收集的最佳实践

Oracle 12c数据库优化器统计信息收集的最佳实践 转载自     沃趣科技(ID:woqutech)  作者         刘金龙(译) 原文链接   http://www.oracle.com/technetwork/database/bi-datawarehousing/twp-bp-for-stats-gather-12c-1967354.pdf 导  语 Oracle优化器会为SQL语句产生所有可能的访问路径(执行计划),然后从中选择一条COST值最低的执行路径,这个cost值是

Oracle系统统计信息

Oracle系统统计信息 系统统计信息主要描述了与系统硬件相关的某些特性,例如cpu和io系统的性能和利用率等.这些信息对于查询优化器来说是非常重要的,在选择执行计划的过程中,oracle优化器会利用系统统计信息来评估执行计划的成本,因此,准确无误的系统统计信息可以帮助优化器做出正确的选择. 我们可以通过DBMS_STATS.GATHER_SYSTEM_STATS过程来收集系统统计信息,收集的方式有两种:负载统计(WORKLOAD STATISTICS)在具有真实系统负载的数据库系统上,收集某一

ORACLE性能调整:统计信息的迁移

很多时候本地测试环境无法的模拟出客户生产系统的所有性能问题,可能在本地环境中速度很快只需几分钟,但在客户那边却往往要跑上几个小时,这个时候除了想办法模拟出客户生产系统中一样多的数据外,还需要得到生产系统的统计信息,导入本地系统重现性能问题! 下面的语句就是具体的操作 步骤! 生产系统: --执行统计信息操作 BEGIN DBMS_STATS.GATHER_SCHEMA_STATS('CITICTEST', 10); END; --创建一个统计信息实体表 BEGIN DBMS_STATS.CREA

[20151226]统计信息的保存时间.txt

[20151226]统计信息的保存时间.txt --前一阵子写了一篇审计统计分析的文章 --链接:http://blog.itpub.net/267265/viewspace-1870823/ --里面提到:视图记录了分析的历史记录DBA_TAB_STATS_HISTORY;,我提到保存1个月. --可以查询SYS.OPTSTAT_HIST_CONTROL$视图. SYS@test> select sname,sval1,sval2 from SYS.OPTSTAT_HIST_CONTROL$

Oracle 11g的统计信息功能增强

在11g中,Oracle在统计信息方面进行了进一步的增强. 这篇介绍PENDING统计信息. 在10g中,Oracle提供了恢复统计信息的方法,这使得统计信息收集后造成的问题可以通过恢复原始统计信息的方法快速解决. 在11g中,Oracle更进了一步,用户收集的统计可以设置为悬而未决的,等到统计信息验证过然后在发布到数据字典中. SQL> SELECT * FROM V$VERSION; BANNER -----------------------------------------------