首批通过分布式安全可靠测评,为关键业务系统打造
配置统计信息的收集策略
更新时间:2026-04-10 11:58:36
通过前面的章节可以知道,当用户收集统计信息时,不指定收集 option 时,会使用默认的 option,比如收集的并行度、收集的粒度、收集直方图桶个数配置等等。目前 OceanBase 数据库优化器支持用户根据业务实际情况去修改默认的 option,也即收集策略的 Preferences,下文简称 “Prefs”。
下表列出了当前优化器支持的收集策略 Prefs。
| Prefs 名称 | Prefs 默认值 | 描述 |
|---|---|---|
| APPROXIMATE_NDV | TRUE | 计算 NDV 是否使用估算方式 |
| CASCADE | DBMS_STATS.AUTO_CASCADE(默认值) | 是否启用级联,如收集表级统计信息时同时收集索引信息 |
| DEGREE | NULL,即并发度为 1 | 收集并发度 |
| ESTIMATE_PERCENT | DBMS_STATS.AUTO_SAMPLE_SIZE | 收集采样比例 |
| GRANULARITY | AUTO | 收集分区粒度 |
| INCREMENTAL | FALSE | 是否采用增量收集策略 |
| METHOD_OPT | FOR ALL COLUMNS SIZE AUTO | 设置列级别直方图收集策略 |
| STALE_PERCENT | 10 | 统计信息过期百分比阈值 |
| STATS_RETENTION | 31 | 统计信息历史保留的间隔时间 |
通过调用一下 DBMS_STATS 系统包 PROCEDURE 可以查询修改收集策略的 Prefs。
GET_PARAM:获取 Prefs 设置的 value。GET_PREFS:获取 Prefs 设置的 value。RESET_GLOBAL_PREF_DEFAULTS:还原当前租户的收集策略的 Prefs 为默认值。RESET_PARAM_DEFAULTS:同上。SET_GLOBAL_PREFS:设置当前租户的 Prefs。SET_PARAM:同上。SET_SCHEMA_PREFS:设置 schema 下的所有表的 Prefs。SET_TABLE_PREFS:设置表的 Prefs。DELETE_SCHEMA_PREFS:删除设置 schema 下的所有表的 Prefs。DELETE_TABLE_PREFS:删除设置表的 Prefs。
#设置租户级别的 APPROXIMATE_NDV 值为 FALSE
call dbms_stats.set_global_prefs('APPROXIMATE_NDV', 'FALSE');
#查询当前租户的 APPROXIMATE_NDV 设置值
select dbms_stats.get_prefs('APPROXIMATE_NDV') from dual;
#还原全局级别的所有 Prefs 默认值
call reset_global_pref_defaults();
#设置用户 TEST 的 T1 的收集策略的 DEGREE 值为 128
call dbms_stats.set_table_prefs('TEST', 'T1', 'degree', '128');
#查询用户 TEST 的 T1 的收集策略的默认 DEGREE 值
select dbms_stats.get_prefs('degree', 'TEST', 'T1') from dual;
#删除用户 TEST 的 T1 表的首选项 DEGREE
call dbms_stats.delete_table_prefs('TEST', 'T1', 'DEGREE');