笔记 20240524
最近在一直在纠结处理 canumda 生产环境数据库表归档的事情,今天终于把这件事了了,决定记录一下历程。
起因是 canumda 生产环境运行一年多后历史表的数据膨胀非常厉害,尤其是 act_hi_detail 表已经达到了 130G+,act_hi_detail 表用于存储历史详情信息,包括历史变量的详细数据。这些数据主要用于审计、历史追溯和报告目的,并不直接影响到系统当前的运行时行为或活动的工作流实例。虽然 act_hi_detail 表的大小对于 camunda 性能影响不大,但是对于数据库存储压力和成本却比较大,所以 DBA 一直在催促将部分历史数据归档至 OBS 然后删除这部分数据减轻数据库存储压力。
上述 act_hi_detail 表作用来自通义千问,camunda 版本 7.13.0
第一阶段:计划写一个定时程序每天进行数据删除保留最近一年的数据,详细设计后发现不可行因为数据库表需要 DBA 进行归档后删除,而且 springboot+camunda 提供的 Api 层不能直接操作 DAO 层,需要自己写 DAO 层操作。
第二阶段:DBA 给出了使用存储过程来循环删除数据的方案,存储过程删除某个时间段的数据,但有数 act_hi_detail 表数据实在太多(5000w+),执行数据删除过程可能导致事务阻塞。
第三阶段:DBA 给出了 rename 替换表的方案,简单说就是创建一个和 act_hi_detail 一样的表 act_hi_detail_empty,然后将 act_hi_detail 表重命名为 act_hi_detail_20240524,act_hi_detail_empty 重命名为 act_hi_detail,达到表替换的过程。经过在测试环境验证两遍后,最终在生产环境执行表替换。剩下的就交给 DBA 归档数据再删除旧表就行了。
版权声明: 本文为 InfoQ 作者【Geek_d01095】的原创文章。
原文链接:【http://xie.infoq.cn/article/c69305d812a8fca36e24c5815】。文章转载请联系作者。
评论