OceanBase 大表清理/数据归档,如何做到不影响线上业务?

部分业务表数据量过大,需要定期清理历史数据,但直接 delete 担心锁表、IO 高、影响业务。
想请教:

  1. OB 大表分批删除的安全方案是什么?
  2. 归档历史数据有哪些成熟方案?
  3. 如何控制清理速度,避免高峰期压垮数据库?
4 个赞

新年快乐!!!

1 个赞

方案一:OB 自带的分区管理 + 外部存储

  1. 将历史数据所在的分区 EXCHANGE PARTITION 到一张普通表。
  2. 使用 mysqldump 或 OBDUMP 工具将这张表导出到对象存储(如 OSS、Ceph)。
  3. 验证数据无误后,删除原分区。

方案二:使用数据同步工具(如 DataX、Canal)

  1. 配置同步任务,将满足归档条件的历史数据实时或定时同步到归档库(如 Hive、ClickHouse)。
  2. 同步完成后,在主库中安全删除数据。

方案三:逻辑归档(软删除)

  • 增加 is_deletedarchive_time 等标记字段,将历史数据标记为 “已归档”,业务查询时自动过滤。
  • 适合对数据访问延迟要求不高的场景。
1 个赞
  • 分批删除:非分区表用「主键分段 + 小批次 DELETE」,分区表直接 DROP 分区(最优);
  • 数据归档:离线归档用 EXP/OBLOADER,需查询用归档表,无侵入用 CDC;
  • 速率控制:错峰执行 + 资源限流 + 监控兜底,核心是「小批次、短事务、低优先级」。

学习了!