• Oracle统计信息


    Oracle统计信息

    统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息。例如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于统计信息。CBO正是根据这些统计信息数据,计算出不同访问路径下,不同join 方式下,各种计划的成本,最后选择出成本最小的计划。

    统计信息是存放在数据字典表中的,如tab$,一般可通过察看某些视图来获取统计信息状况,如DBA_TABLES,DBA_INDEXES,DBA_TAB_COL_STATISTICS, DBA_TAB_HISTOGRAMS等。在这些视图中包含表示统计信息的一些字段,这些字段只有搜集过统计信息之后才有值,否则是空的。例如,last_analyzed 字段表示上次统计信息搜集的时间,可以根据这个字段,快速的了解最近一次统计信息搜集的时间。

    oracle会按自己的规则自动收集统计信息,但是有时候需要自己手动收集统计信息,比如大规模etl导入数据时。

    手动收集信息方式:

    DBMS_STATS.GATHER_TABLE_STATS的语法如下:
    DBMS_STATS.GATHER_TABLE_STATS (ownname VARCHAR2, tabname  VARCHAR2, partname VARCHAR2,
    estimate_percent NUMBER,block_sample BOOLEAN,method_opt  VARCHAR2,degree  NUMBER, granularity VARCHAR2, 
    cascade  BOOLEAN,stattab VARCHAR2,statid VARCHAR2,
    statown VARCHAR2,no_invalidate BOOLEAN, force BOOLEAN);
     
    参数说明:
    ownname:要分析表的拥有者
    tabname:要分析的表名.
    partname:分区的名字,只对分区表或分区索引有用.
    estimate_percent:采样行的百分比,取值范围[0.000001,100],null为全部分析,不采样.常量:DBMS_STATS.AUTO_SAMPLE_SIZE是默认值,由oracle决定最佳取采样值.
    block_sapmple:是否用块采样代替行采样.
    method_opt:决定histograms信息是怎样被统计的.method_opt的取值如下(默认值为FOR ALL COLUMNS SIZE AUTO):
    for all columns:统计所有列 的histograms.
    for all indexed columns:统计所有indexed列的histograms.
    for all hidden columns:统计你看不到列的histograms
    for columns <list> SIZE <N> | REPEAT | AUTO | SKEWONLY:统计指定列的histograms.N的取值范围[1,254];REPEAT上次
    统计过的histograms;AUTO由oracle决定N的大小;SKEWONLY 选项会耗费大量处理时间,因为它要检查每个索引中的每个列的值的分布情况。
    degree:决定并行度.默认值为null.
    granularity:Granularity of statistics to collect ,only pertinent if the table is partitioned.
    cascade:是收集索引的信息.默认为FALSE.
    stattab:指定要存储统计信息的表,statid如果多个表的统计信息存储在同一个stattab中用于进行区分.statown存储统计信息表的拥有者.以上三个参数若不指定,统计信息会直接更新到数据字典.
    no_invalidate: Does not invalidate the dependent cursors if set to TRUE. The procedure invalidates the 
    dependent cursors immediately if set to FALSE.
    force:即使表锁住了也收集统计信息
  • 相关阅读:
    Ubuntu vsftp复制文件到远端时错误,Permission denied
    linux 常用命令
    vbox安装ubuntu之后挂载共享文件夹无权限访问的问题以及改了主机名,导致命令行不能解析主机名的问题
    java 中的valueOf方法和强转
    读写文件,用代码在讲html文件转为jsp文件
    hibernate查询之后用el表达式取值时遇到的问题
    考研:操作系统:进程同步—信号量实现同步互斥(PV操作)
    考研:操作系统:处理机调度——几种经典的调度算法
    KMP算法
    mysql出现ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' 错误
  • 原文地址:https://www.cnblogs.com/jnba/p/10677666.html
Copyright © 2020-2023  润新知