专栏首页Java学习网Oracle的自动统计信息不收集直方图的信息

Oracle的自动统计信息不收集直方图的信息

在oracle9i中,默认的统计信息收集是不收集直方图信息的,也就是说默认的MOTHOD_OPT模式为FOR ALL COLUMNS SIZE 1

在10g开始,dbms_stats包中默认的METHOD_OPT做了调整,默认的METHOD_OPT值为FOR ALL COLUMNS SIZE AUTO

SQL> select * from v$version;
BANNER
—————————————————————-
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 – 64bi
PL/SQL Release 10.2.0.5.0 – Production
CORE    10.2.0.5.0      Production
TNS for Linux: Version 10.2.0.5.0 – Production
NLSRTL Version 10.2.0.5.0 – Production
 
SQL> select dbms_stats.get_param('method_opt') from dual;
 
DBMS_STATS.GET_PARAM('METHOD_OPT')
——————————————————————–
FOR ALL COLUMNS SIZE AUTO

这就说明,从10g开始,统计信息收集中的直方图部分,收集与否是有oracle自从判断,从实际的使用来看,oracle的智能判断并不是100%正确, oracle往往会大量的收集一些并不是必须的直方图信息,而有些直方图信息又会对查询造成不必要的影响

由于我们简单的对直方图进行删除后,oracle的自动统计信息又会重新收集,所以我们需要采取一些必要的方法,来规避这个问题

10g中:

  • 解决方案
  1. 删除表的统计信息
  2. 手工收集标的统计信息,不收集直方图
  3. lock表的统计信息
  4. 创建JOB手工收集统计信息

11g中

在11g中,oracle对dbms_stats包添加了新功能,提供给我们进行修改,可以使用dbms_stats.set_table_prefs

  • 删除直方图信息:

dbms_stats.delete_column_stats procedure and setting the col_stat_type parameter to HISTOGRAM.

BEGIN
dbms_stats.delete_column_stats(
ownname=>'SH', tabname=>'SALES', colname=>'PROD_ID', col_stat_type=>'HISTOGRAM');
END;
Use the new dbms_stats.set_table_pref procedure to set a specific value for the method_opt parameter for the table effected by this problem. The following value for the method_opt parameter tells Oracle to continue to collect histograms as usual on all of the columns in the SALES table except for the PROD_ID column, which should never have a histogram created on it.
BEGIN
dbms_stats.set_table_prefs('SH', 'SALES','METHOD_OPT', 'FOR ALL COLUMNS SIZE AUTO, FOR COLUMNS SIZE 1 PROD_ID');
END;
/

The auto stats gathering job or your own statistics gathering commands will now use the table preference you set when it gathers statistics on this table and will no longer create a histogram on the ID column.

本文分享自微信公众号 - Java学习网(javalearns),作者:javalearns

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Oracle 11G统计信息自动收集及调整

    Leshami
  • 关于Oracle开启自动收集统计信息的SPA测试

    主题:关于Oracle开启自动收集统计信息的SPA测试 环境:Oracle RAC 11.2.0.4(Primary + Standby) 需求:生产Pri...

    Alfred Zhao
  • 自动统计信息收集(Automatic Optimizer Statistics Collection)

    本文主要介绍自动统计信息收集(Automatic Optimizer Statistics Collection)任务。

    SQLplusDB
  • Oracle 12c数据库优化器统计信息收集的最佳实践(三)|何时不需要收集统计信息

    原文链接 http://www.oracle.com/technetwork/database/bi-datawarehousing/twp-bp-for-st...

    沃趣科技
  • 【DB笔试面试629】在Oracle中,自动收集统计信息的机制有哪些?10g和11g在自动收集统计信息方面有哪些区别?

    在Oracle中,自动收集统计信息的机制有哪些?10g和11g在自动收集统计信息方面有哪些区别?

    小麦苗DBA宝典
  • 【DB笔试面试630】在Oracle中,怎样收集表的统计信息?怎样收集分区表的统计信息?

    主要采用DBMS_STATS.GATHER_TABLE_STATS包进行统计信息的收集,如下所示:

    小麦苗DBA宝典
  • 统计信息自动收集任务失效原因排查

    环境:Oracle 11.2.0.3 RAC 问题:统计信息自动收集任务失效原因排查

    Alfred Zhao
  • DBMS_STATS收集统计信息的问题及解决

    收集数据库的统计信息是dba工作的一部分,如果在数据快速增长的库上,统计信息如果收集的频率太慢,会对执行计划有一定的影响。 而对于逐渐客户饱和的系统来说,统计信...

    jeanron100
  • 【DB笔试面试636】在Oracle中,如何收集直方图信息?在收集直方图时有哪些注意事项?

    默认情况下,数据库会为列收集基本统计信息,但不会收集直方图信息。Oracle通过指定DBMS_STATS的METHOD_OPT参数来创建直方图。METHOD_O...

    小麦苗DBA宝典

扫码关注云+社区

领取腾讯云代金券