适用场景

生产库越来越慢,往往不是硬件不行,而是三年前的数据还在里面。归档的价值是双向的:生产库变快,历史数据还能查。关键是归档要合规、可检索、可验证。

配置步骤(归档策略与执行)

-- 1) 先量化:找出大表与冷数据占比
SELECT table_name, table_rows,
       ROUND(data_length/1024/1024) AS data_mb,
       ROUND(index_length/1024/1024) AS idx_mb
FROM information_schema.tables
WHERE table_schema = DATABASE()
ORDER BY data_length DESC LIMIT 15;

-- 2) 冷数据识别(示例:2 年前且已结案)
SELECT COUNT(*) FROM biz_order WHERE created_at < '2024-09-01' AND status = 'closed';

-- 3) 归档(分批 + 限速思路)
-- a. 建历史库历史表(结构一致,索引精简)
-- b. INSERT INTO hist.biz_order SELECT ... WHERE ... LIMIT 1000; 循环
-- c. 校验行数与汇总
-- d. 确认无误后删除生产库数据(分批,避免长事务)

关键参数与建议

  • 划分标准:按时间(超过 N 个月)、按状态(已结案/已结束)双维度
  • 保留期:按法规与业务要求定(财务/交易类通常 5-10 年),到期清理要审批
  • 归档形式:历史库(可查询)+ 归档文件(对象存储/磁带,必要时可恢复)
  • 检索:业务方要能查历史数据,提供只读查询入口,避免「归档即失联」
  • 一致性:归档前后行数与汇总值必须校验,抽样比对关键字段
  • 删除策略:确认合规与财务要求后再删,删除要有审批与备份
  • 性能:归档任务限速,避开业务高峰,注意归档期间的索引与锁
  • 记录:归档批次、数据范围、负责人、校验结果全部留档

容易踩的坑

  • 一次性 DELETE 几千万行,产生巨大事务与主从延迟
  • 归档后不校验,数据少了没人发现
  • 历史库没有查询入口,业务方查到不到只能找开发
  • 索引照抄生产,历史库体积没降多少
  • 删除没审批,遇到审计时拿不出依据
  • 归档脚本没有幂等设计,重复执行造成重复数据

验证与巡检

-- 归档前后核对
SELECT COUNT(*) FROM biz_order;
SELECT COUNT(*) FROM hist.biz_order;
SELECT SUM(amount) FROM biz_order WHERE created_at < '2024-09-01';
SELECT SUM(amount) FROM hist.biz_order WHERE created_at < '2024-09-01';

-- 生产库瘦身效果
SELECT ROUND(data_length/1024/1024) FROM information_schema.tables
WHERE table_name = 'biz_order';
  • 巡检:行数与汇总一致、查询入口可用、归档批次有记录、生产库体积与查询耗时下降

小结

归档验收:生产库瘦身可量化(表大小/查询耗时下降),历史数据能按业务需求查回,行数与汇总校验一致,合规保留期有依据。

> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。