oceanbase v4数据库统计信息和oracle数据库的区别

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】oceanbase v4数据库统计信息和oracle数据库的区别

2 个赞

一、总体设计理念差异

维度 Oracle OceanBase V4
优化器 经典 CBO(Cost-Based Optimizer) CBO + 分布式感知
架构 单机 / RAC(共享存储) 原生分布式(Shared-Nothing)
统计信息目标 精确刻画对象数据分布 兼顾数据分布 + 分区/副本/日志流位置
统计信息复杂度 非常丰富、粒度细 有所裁剪,更强调稳定性

核心区别一句话总结:

Oracle 的统计信息更“精细和复杂”,OceanBase 的统计信息更“分布式友好和稳态优先”。

二、统计对象范围对比

:one: 表级统计信息

项目 Oracle OceanBase V4
行数(NUM_ROWS) :heavy_check_mark: :heavy_check_mark:
块数 :heavy_check_mark:(blocks) :x:(无 block 概念)
平均行长度 :heavy_check_mark: :heavy_check_mark:
表扫描代价相关统计 :heavy_check_mark: :heavy_check_mark:(但算法不同)

:point_right: 关键差异
OceanBase 没有 Oracle 的 block/I/O 模型,而是基于 宏块 / SSTable / MemTable 的存储抽象。

:two: 列级统计信息

项目 Oracle OceanBase V4
NDV(不重复值) :heavy_check_mark: :heavy_check_mark:
Null 数 :heavy_check_mark: :heavy_check_mark:
数据分布 :heavy_check_mark: :heavy_check_mark:
平均列长度 :heavy_check_mark: :heavy_check_mark:

:three: 直方图(Histogram)

类型 Oracle OceanBase V4
Frequency :heavy_check_mark: :heavy_check_mark:
Height Balanced :heavy_check_mark: :heavy_check_mark:
Hybrid :heavy_check_mark:(12c+) :x:
Top-Frequency :heavy_check_mark: :x:

:point_right: 区别点非常重要
Oracle 的直方图体系更复杂,对倾斜数据刻画更细;
OceanBase 目前以 稳定性和可控性 为主,避免过度直方图导致计划抖动。

:four: 索引统计信息

项目 Oracle OceanBase V4
索引高度 :heavy_check_mark: :x:
Clustering Factor :heavy_check_mark: :x:
索引行数 :heavy_check_mark: :heavy_check_mark:
索引选择性 :heavy_check_mark: :heavy_check_mark:(内部计算)

:point_right: OceanBase 没有 Oracle 的 Clustering Factor 概念,
因为 数据本身就是分区 + 多副本 + LSM-Tree 结构

:five: 分区级统计信息

项目 Oracle OceanBase V4
分区表统计 :heavy_check_mark: :heavy_check_mark:
子分区 :heavy_check_mark: :heavy_check_mark:
全局统计 :heavy_check_mark: :heavy_check_mark:
增量收集 :heavy_check_mark: :heavy_check_mark:(逻辑不同)

:point_right: OceanBase 的分区统计与日志流(LS)/ 副本位置强相关,这是 Oracle 没有的维度。

三、统计信息收集方式差异(重点)

:one: Oracle:成熟且复杂

EXEC DBMS_STATS.GATHER_TABLE_STATS(
  ownname => 'SCOTT',
  tabname => 'EMP',
  cascade => TRUE
);

特点:

  • 自动任务(Auto Task)
  • 支持:
    • 增量统计(INCREMENTAL)
    • 扩展统计(表达式、组合列)
    • 自适应直方图
  • 统计信息高度影响执行计划

:two: OceanBase V4:兼容 + 分布式增强

CALL DBMS_STATS.GATHER_TABLE_STATS(
  ownname => 'TEST',
  tabname => 'T1'
);

特点:

  • 语法高度兼容 Oracle
  • 实现机制不同:
    • 统计任务在 Root Service 统一调度
    • 各分区并行采样
  • 更强调:
    • 统计稳定性
    • 避免频繁采样带来的计划抖动

:three: 自动统计收集差异

对比项 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 个赞