当前位置:  数据库>oracle

[Oracle] 统计信息和dbms_stats包

    来源: 互联网  发布时间:2017-05-21

    本文导语: 1、统计信息的作用 Oracle基于CBO的优化器在生成执行计划时,很大程度上依赖于统计信息,你可以把CBO理解为一个复杂的数学模型,而统计信息是它最主要的输入,执行计划是输出,如果输入都不准确,输出还可能准确吗?所有...

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 SIZE | 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。

        
     
     
     
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle数据库运行Oracle form时避免出现提示信息
  • linux下通过对文件读取方式查询oracle的版本信息
  • 深入oracle特定信息排序的分析
  • 如何获取Linux及Oracle版本信息
  • Oracle的sqlcode对应的错误信息sqlerrm
  • 如何取得ORACLE中的SYNONYMS信息?
  • 在suse linux下安装oracle报如下错误信息,请高手解答!
  • 避免Oracle中英文提示信息的两个好方法
  • 紧急! 如何得知一特定表是否存在的信息?(ORACLE).....
  • Linux(Oracle系统在上面)系统无缘无故死机 , 可能是由于应用程序引起 , 可是由于重新启动查不到相关信息 , 不知道在哪里有记录系统CPU Lo
  • Oracle查询表、视图、序列等信息查询
  • 错误信息:java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver,求解决方案!
  • oracle获取当前用户表、字段等详细信息SQL
  • 在linux下安装oracle时,使用sysctl检查系统参数时出现许多error信息,不知道怎么回事,望高手指点!
  • Oracle 11g自动诊断信息库(Automatic Diagnostic Repository,ADR)概述
  • oracle中如何获得数据库的DBID信息
  • Oracle 查询表信息获取表字段及字段注释
  • Oracle数据库查询表的基本信息
  • Oracle数据库处理多媒体信息
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,