db-archive 是一款面向数据库大表治理的数据归档工具,用于将业务数据库中的历史数据按条件迁移至归档表或归档库,从而减少主库数据规模,提升查询性能并降低存储成本。
该工具支持按时间或业务条件归档数据,并提供分片处理和并发执行能力,适用于亿级以上大表的数据迁移与清理场景。归档过程中可配置批量大小、并发数及读写限流,避免对线上业务造成影响。同时系统会记录任务执行状态、数据处理量和执行时间,方便监控与运维管理。
db-archive 适用于订单、日志、交易等持续增长的数据表,帮助企业实现数据生命周期管理,是 DBA 和数据平台团队进行数据库容量治理与性能优化的重要工具。
source: 源,需要归档或清理的表所在侧(一般为生产环境实例,会进行读取和删除数据操作)
sink: 目标,数据接收侧,(归档存在的实例,会会进行插入数据操作)
both: 双向
move: source数据移动到sink(会删除source的数据)
copy_only: source数据复制到sink(不会删除source的数据)
delete_only: 不会复制数据到sink,直接删除source数据(风险高)
insert: 正常的模式,唯一键或主键冲突,会报错退出
upsert: 根据sink数据库类型不同采用不同的操作:mysql是replace into ,oracle是merge into
一个归档任务,会使用切分字段按切换大小进行切分为多个子任务执行。如果切分字段为空,则切分为1个子任务(也即是不切分)。
目前支持切分字段类型:整型、时间、字符串等,需要建立索引。
超过100万的大表建议切分为多个子任务执行。
切分的归档任务支持时间窗口暂停、手动暂停、和手动恢复
未切分的归档任务只支持强行终止,强行终止后,再次恢复执行 可能会报主键冲突、行数不一致的错误。
控制insert和delete操作的事务的大小
支持跨天写法,如:23:00-06:00
支持多个时间窗口,如:22:00-23:00,02:00-04:00(多个时间窗口使用英文逗号分隔,不能存在其他符号或空格)
并发数: 同1个归档任务中,可以同时执行几个子任务
写入限速: 归档任务写入限速
删除限速: 归档任务删除限速
周期调度独有,表示多久执行一次归档,默认为1天(常用配置是:1、7、30、365)
有个前提条件:上一次归档状态"completed、failed、stopped",这3个状态之一,如果上一次归档任务为running或paused等,则不会再次归档。
满足条件的数据源才会进行归档,如:create_time < '2020-01-01',代表归档2020年之前的数据
删除前,会对source和sink端做count(*)统计,两者纪录数一致才会执行删除。如果增量归档,由于sink端包括上一次归档的数据,统计时,归档库的行数大于source库的行数,则无法删除通过预核对。
所以建议归档条件采用左闭右开,如:create_time >= '2021-12-31' and create_time < '2020-01-01',这样的条件不包含了上一次归档的数据(2021-12-30或之前的数据),预核对通过。
周期调度下的归档条件支持宏表达式:
宏表达式,返回的是字符串,如:
{{today}}: 返回当前日期,如:2026-02-10
{{today-1}}:返回昨天的日期,如:2026-02-09
{{today+1}}:返回明天的日期,如:2026-02-11
mysql参考条件:
create_time >= '{{today-31}}' and create_time < '{{today-30}}' --归档30天前的数据
oracle参考条件:
create_time >= to_date('{{today-31}}','yyyy-mm-dd') and create_time < to_date('{{today-30}}','yyyy-mm-dd')
create_time >= date'{{today-31}}' and create_time < date'{{today-30}}'
配置source和sink的数据源
其中扩展配置(json格式):
oracle需要配置服务名,如:{"serviceName":"SCPRD"}
doris需要配置fe的http地址用于stream load,如:{"feHttpURL":"http://10.0.94.91:8030"}
配置周期调度,多次执行的归档任务,配置后会根据间隔天数循环执行,直至关闭。归档条件支持宏表达式(变量),可以通过查看 任务列,查看这个调度作业的历史归档任务执行情况。
可以查看归档执行情况,可以暂停、终止归档任务。可以修改归档任务时间窗口、并发与限速参数,修改后需要先暂停再恢复启动归档任务参数才生效。
- 周期调度产生的归档任务,在这个页面可以展示。类型为:周期。
- 还可以通过新增手动创建的归档任务,在这个页面可以展示。类型为:单次。 所有归档任务,会拆分为多个子任务执行,点击 查看子任务 都可以在任务列查看,查看任务列,点击任务列,会进入任务详情页面。
查看子任务执行情况。