欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > Oracle DBMS_STATS.GATHER_DATABASE_STATS 默认行为

Oracle DBMS_STATS.GATHER_DATABASE_STATS 默认行为

2025/7/15 11:31:16 来源:https://blog.csdn.net/lee_vincent1/article/details/147935339  浏览:    关键词:Oracle DBMS_STATS.GATHER_DATABASE_STATS 默认行为

Oracle DBMS_STATS.GATHER_DATABASE_STATS 默认行为

DBMS_STATS.GATHER_DATABASE_STATS的默认选项究竟是’GATHER’还是’GATHER AUTO’?这个问题非常重要,因为理解默认行为直接影响统计信息收集策略。

一 官方文档确认

根据Oracle 19c官方文档:

  • options参数默认值是’GATHER’,不是’GATHER AUTO’
DBMS_STATS.GATHER_DATABASE_STATS (estimate_percent NUMBER   DEFAULT to_estimate_percent_type (get_param('ESTIMATE_PERCENT')),block_sample     BOOLEAN  DEFAULT FALSE,method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')),stattab          VARCHAR2 DEFAULT NULL, statid           VARCHAR2 DEFAULT NULL,options          VARCHAR2 DEFAULT 'GATHER',objlist          OUT      ObjectTab,statown          VARCHAR2 DEFAULT NULL,gather_sys       BOOLEAN  DEFAULT TRUE,no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (get_param('NO_INVALIDATE')),obj_filter_list ObjectTab DEFAULT NULL);DBMS_STATS.GATHER_DATABASE_STATS (estimate_percent NUMBER   DEFAULT to_estimate_percent_type (get_param('ESTIMATE_PERCENT')), block_sample     BOOLEAN  DEFAULT FALSE,method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')),stattab          VARCHAR2 DEFAULT NULL, statid           VARCHAR2 DEFAULT NULL,options          VARCHAR2 DEFAULT 'GATHER',statown          VARCHAR2 DEFAULT NULL,gather_sys       BOOLEAN  DEFAULT TRUE,no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (get_param('NO_INVALIDATE')),obj_filter_list ObjectTab DEFAULT NULL);

在这里插入图片描述

二 默认GATHER行为的完整解释

1. 实际默认行为

-- 完全等价的两种写法
DBMS_STATS.GATHER_DATABASE_STATS;
DBMS_STATS.GATHER_DATABASE_STATS(options => 'GATHER');

2. GATHER模式的特点

  • 全量收集:会收集数据库中所有对象的统计信息
  • 不考虑数据变化量:不检查STALE_STATS状态
  • 完全刷新:确保所有统计信息都是最新的

3. 与GATHER AUTO的核心区别

特性GATHER(默认)GATHER AUTO
收集范围所有对象仅需要更新的对象
系统影响
执行时间
统计信息时效性全部最新可能存在延迟
适用场景初始环境/重大变更后日常维护

三、生产环境推荐用法

1. 常规维护建议使用GATHER AUTO

-- 显式指定GATHER AUTO是更好的实践
BEGINDBMS_STATS.GATHER_DATABASE_STATS(options => 'GATHER AUTO',gather_sys => FALSE,degree => DBMS_STATS.AUTO_DEGREE);
END;
/

2. 需要完全刷新时使用默认GATHER

-- 数据仓库全量加载后等场景
BEGINDBMS_STATS.GATHER_DATABASE_STATS(estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt => 'FOR ALL COLUMNS SIZE AUTO',degree => 8);  -- 根据系统资源指定并行度
END;
/

四、如何验证当前行为

1. 检查实际收集情况

-- 收集前记录时间戳
ALTER SESSION SET nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
SELECT sysdate FROM dual;-- 执行收集(使用默认参数)
EXEC DBMS_STATS.GATHER_DATABASE_STATS;-- 检查哪些表被更新
SELECT owner, table_name, last_analyzed 
FROM dba_tables
WHERE last_analyzed > TO_DATE('2023-08-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS')
ORDER BY last_analyzed DESC;

2. 查看默认参数设置

-- 检查options默认值
SELECT dbms_stats.get_prefs('OPTIONS') FROM dual;-- 检查全局偏好设置
SELECT * FROM sys.optstat_hist_control$;

五、历史版本差异说明

虽然当前文档明确默认是GATHER,但需要注意:

  1. Oracle 10g/11g时期

    • 存在一些版本/补丁的默认行为可能不同
    • 某些文档曾提到过更智能的默认行为
  2. Oracle 12c及以后

    • 明确规范了默认就是GATHER
    • 但自动维护任务(自动统计信息收集)使用的是GATHER AUTO逻辑

六、最佳实践总结

  1. 不要依赖默认值

    • 显式指定options参数
    • 确保脚本行为明确可控
  2. 两种模式的典型场景

    • GATHER AUTO:日常夜间维护作业
    • GATHER:月维护窗口/数据迁移后
  3. 特殊对象处理

    -- 对大表设置单独策略
    EXEC DBMS_STATS.SET_TABLE_PREFS('SH', 'SALES', 'ESTIMATE_PERCENT', '5');-- 对关键业务表提高收集频率
    EXEC DBMS_STATS.SET_TABLE_PREFS('HR', 'EMPLOYEES', 'STALE_PERCENT', '1');
    
  4. 监控策略

    -- 创建统计信息收集报告
    SELECT job_name, status, actual_start_date, run_duration
    FROM dba_scheduler_job_run_details
    WHERE job_name LIKE 'GATHER_STATS%'
    ORDER BY actual_start_date DESC;
    

DBMS_STATS.GATHER_DATABASE_STATS的默认options参数是’GATHER’,会收集所有对象的统计信息,而不是智能选择。生产环境中显式指定GATHER AUTO通常是更好的选择。

官方文档路径:

https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_STATS.html#GUID-7D7442B5-B060-40E9-AA18-2085E527C3B1

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词