oracle 统计信息

1、收集 ANALYZE DBMS_STATS
    ANALYZE 不能收集分区表信息 不能并行收集
    DBMS_STATS 只能收集CBO相关统计信息 不能收集行迁移/行链接 不能校验表和索引的结构信息 


2、历史统计信息 WRI$_OPTSTAT_TAB_HISTORY (TRUNCATE后会自动收集统计信息 生产环境上线后应及时收集统计信息避免CBO选择错误计划)


3、表的统计信息 记录数 表块数 平均行长度等


4、索引的统计信息 索引层级 叶块数量 聚簇因子等 (聚簇因子接近表块数量时 索引行和数据行存储顺序相似度高 索引范围扫描成本低)


5、列的统计信息 DISTINCT值数量 NULL值数量 列的最小值 列的最大值等
     统计信息不准导致谓词越界 错误计划
     直方图 避免列数据分布极不均匀导致错误计划  ENDPOINT NUMBER VALUE
            FREQUENCY BUCKET数量和列的DISTINCT值数量相等 (12C前数目不能超过254)
            HEIGHT BALANCED BUCKET数量小于列的DISTINCT值数量
            文本型字段直方图缺陷 只记录前32个字节 导致错误计划
            如果CURSOR_SHARING为SIMILAR 将导致产生大量CHILD CURSOR
            主键、唯一索引不需要收集 从没在WHERE条件中出现不需要收集 10G自动收集作业


6、全局统计信息 分区表 分区索引 应使用DBMS_STATS收集全局统计信息 保持GRANULARITY一致 


7、动态采样 默认WHERE条件中的各列彼此之间是独立的没有关联关系 导致计划不准确
            较准确估算组合列的选择率
            应用执行过程中创建临时表 此时没有统计信息
            采样是针对选取出来的部分数据块实际执行一次目标SQL并根据结果估算
            仅适用于单表或者多表关联的第一个驱动表的SELECT UPDATE DELETE语句
      
8、多列统计信息 (11G新特性) 


9、系统统计信息 主机CPU IO处理能力(单块读 多块读平均时间)等信息


10、数据字典统计信息 


11、内部对象统计信息


12、自动统计信息收集 11G中7个维护窗口 有资源限制 CATMWIN.SQL 
                     根据MON_MODS_ALL$记录的变化量是否超过TAB$的表记录数的10% 决定是否自动收集


13、如何收集统计信息 
        导入大量数据后及时收集
        新上线或新迁移的系统导入大量数据后 为避免事务提交可加HINT
        及时对包含日期型字段的表收集统计信息,避免谓词越界
        采样比例设置 11G 建议 DBMS_STATS.AUTO_SAMPLE_SIZE
        DBMS_STATS收集分区表
        硬件变化重新收集一次系统统计信息
        发现明确性能问题时可能额外收集X$的内部对象统计信息

你可能感兴趣的:(sql,Oracle,sql优化)