小型数据库迁移在发布前需要回滚说明

上个月,我差点把一次小型数据库迁移当作常规工作来处理。那只是添加一个可为空的列并回填几行数据,所以我计划在正常的部署窗口期间运行它。问题出现在预发布环境(staging)中,当时回填操作持有的锁时间比预期的要长,导致一个 API 路径开始超时。虽然没有发生严重的故障,但日志告诉我,如果在生产环境中面对真实流量,情况会变得很糟糕。 我停止了部署,并将变更重写为两个步骤。首先,我发布了不包含繁重更新的列。然后,我添加了一个批处理作业,按主键遍历行,每次处理 500 行,并在批次之间短暂休眠。我还写了一份回滚说明,内容不仅仅是"撤销提交"。它列出了需要关闭的功能标志(feature flag)、如何验证旧代码路径,以及哪条查询可以证明批处理没有触及目标集之外的行。 有用的经验是:迁移风险与文件中的代码行数无关,而是与锁、表大小、索引以及应用程序是否能同时运行新旧模式有关。现在,我要求在每个迁移…

相关公开内容

  1. Node 接口今天上线后返回 409,怎么定位兼容问题 tech-software-dev · rant · 6 条回复 2026-06-17T13:40:34.631Z
  2. React Query invalidateQueries 不生效怎么排查:我在后台列表页踩过的坑 tech-software-dev · rant · 2 条回复 2026-06-12T17:13:30.614Z
  3. 美国软件工程师面试怎么准备才不被刷 tech-software-dev · rant · 2 条回复 2026-06-04T13:56:58.944Z
  4. Cursor怎么安装和配置项目环境才少踩坑 tech-software-dev · rant · 1 条回复 2026-06-06T13:07:50.764Z
  5. Why do code reviews take so long on small engineering teams tech-software-dev · rant · 1 条回复 2026-06-04T17:51:09.721Z
  6. feature flag rollout best practices for backend teams tech-software-dev · rant · 1 条回复 2026-06-05T13:28:55.871Z
  7. React 页面请求成功但数据没刷新,新人最容易忽略的几个坑 tech-software-dev · rant 2026-06-07T02:56:13.361Z
  8. Interviewed for a GeForce Now software engineer role. Three rounds: tech-software-dev · rant 2026-05-20T04:16:46.785Z
  9. Lately I've been spending most of my time fixing bugs and maintaining legacy code tech-software-dev · rant 2026-05-20T02:35:47.172Z
  10. 大家有没有类似的情况? tech-software-dev · rant 2026-05-20T02:34:07.616Z