【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】oceanbase v4数据库统计信息和oracle数据库的区别
2 个赞
一、总体设计理念差异
| 维度 | Oracle | OceanBase V4 |
|---|---|---|
| 优化器 | 经典 CBO(Cost-Based Optimizer) | CBO + 分布式感知 |
| 架构 | 单机 / RAC(共享存储) | 原生分布式(Shared-Nothing) |
| 统计信息目标 | 精确刻画对象数据分布 | 兼顾数据分布 + 分区/副本/日志流位置 |
| 统计信息复杂度 | 非常丰富、粒度细 | 有所裁剪,更强调稳定性 |
核心区别一句话总结:
Oracle 的统计信息更“精细和复杂”,OceanBase 的统计信息更“分布式友好和稳态优先”。
二、统计对象范围对比
表级统计信息
| 项目 | Oracle | OceanBase V4 |
|---|---|---|
| 行数(NUM_ROWS) | ||
| 块数 |
|
|
| 平均行长度 | ||
| 表扫描代价相关统计 |
|
关键差异
OceanBase 没有 Oracle 的 block/I/O 模型,而是基于 宏块 / SSTable / MemTable 的存储抽象。
列级统计信息
| 项目 | Oracle | OceanBase V4 |
|---|---|---|
| NDV(不重复值) | ||
| Null 数 | ||
| 数据分布 | ||
| 平均列长度 |
直方图(Histogram)
| 类型 | Oracle | OceanBase V4 |
|---|---|---|
| Frequency | ||
| Height Balanced | ||
| Hybrid |
|
|
| Top-Frequency |
区别点非常重要
Oracle 的直方图体系更复杂,对倾斜数据刻画更细;
OceanBase 目前以 稳定性和可控性 为主,避免过度直方图导致计划抖动。
索引统计信息
| 项目 | Oracle | OceanBase V4 |
|---|---|---|
| 索引高度 | ||
| Clustering Factor | ||
| 索引行数 | ||
| 索引选择性 |
|
OceanBase 没有 Oracle 的 Clustering Factor 概念,
因为 数据本身就是分区 + 多副本 + LSM-Tree 结构。
分区级统计信息
| 项目 | Oracle | OceanBase V4 |
|---|---|---|
| 分区表统计 | ||
| 子分区 | ||
| 全局统计 | ||
| 增量收集 |
|
OceanBase 的分区统计与日志流(LS)/ 副本位置强相关,这是 Oracle 没有的维度。
三、统计信息收集方式差异(重点)
Oracle:成熟且复杂
EXEC DBMS_STATS.GATHER_TABLE_STATS(
ownname => 'SCOTT',
tabname => 'EMP',
cascade => TRUE
);
特点:
- 自动任务(Auto Task)
- 支持:
- 增量统计(INCREMENTAL)
- 扩展统计(表达式、组合列)
- 自适应直方图
- 统计信息高度影响执行计划
OceanBase V4:兼容 + 分布式增强
CALL DBMS_STATS.GATHER_TABLE_STATS(
ownname => 'TEST',
tabname => 'T1'
);
特点:
- 语法高度兼容 Oracle
- 实现机制不同:
- 统计任务在 Root Service 统一调度
- 各分区并行采样
- 更强调:
- 统计稳定性
- 避免频繁采样带来的计划抖动
自动统计收集差异
| 对比项 | Oracle | OceanBase |
|---|---|---|
| 自动统计 | 默认开启 | 默认开启 |
| 触发条件 | 数据变化比例 | 数据变化 + 租户资源 |
| 执行位置 | 本地实例 | 分布式并行 |
| 资源控制 | 较粗 | 租户级资源隔离 |
四、统计信息使用方式差异(CBO)
Oracle CBO 特点
- 强依赖统计信息
- 执行计划对:
- NDV
- 直方图
- Clustering Factor
极其敏感
- 统计信息变化 → 计划突变(Plan Flip)
OceanBase CBO 特点
- 使用统计信息 + 分布式代价模型
- 代价模型还会考虑:
- 数据是否本地
- 跨 LS / 跨节点代价
- 相对 Oracle:
- 计划更稳
- 但极端数据倾斜场景下,精度略弱
五、统计信息存储与可见性
| 维度 | Oracle | OceanBase |
|---|---|---|
| 数据字典 | DBA_TAB_STATISTICS | DBA_TAB_STATISTICS(兼容视图) |
| 内部表 | SYS.WRI$OPTSTAT* | OceanBase 内部系统表 |
| 多租户隔离 | CDB/PDB | 租户天然隔离 |
六、维护与调优思路差异
Oracle 常见调优动作
- 锁定统计信息
- 删除直方图
- 手工设置 NDV
- 扩展统计
- SPM / Outline 稳定计划
OceanBase 更推荐的做法
- 尽量使用自动统计
- 只在以下情况手工干预:
- 大批量数据装载后
- 分区快速膨胀
- 执行计划明显偏差
- 配合:
- Outline
- Hint
- 租户资源控制
2 个赞
应该类似的,不过没oracle强大
2 个赞