Skip to content

高風險變更窗口

這是什麼 對 production 高風險變更(大表 DDL、敏感 DML、跨服務 schema 改造)的標準窗口、執行 SOP、緊急聯絡。

何謂高風險

任一條件 → 算高風險:

  • 目標 environment = prod
  • 大表(>10M rows)的 DDL
  • 全表 / 大範圍 DML(UPDATE / DELETE 預估影響 > 100k rows)
  • 不可逆動作(DROP TABLE / DROP COLUMN / TRUNCATE
  • 跨服務 contract change(外部服務會讀的 schema)
  • 業務指標上升期 / 大促前後 48h 內

不確定 → 視同高風險處理。

窗口政策

窗口時段適用
常規窗口週二 / 週四 02:00–05:00高風險變更預設走這
延伸窗口週日 02:00–06:00大規模 release
緊急窗口隨時安全 / 事故修補;需現場 DBA Lead 簽核
凍結期每季最後一週 + 大促前後 48h任何 prod 變更皆禁,除非走緊急窗口

凍結期由 Settings → Maintenance Window 集中設定,會自動阻擋 task 啟動並回 錯誤碼 301 TaskTimingNotAllowed

窗口執行 SOP

T-1 day(前一天)

  • [ ] 在 #db-ops 頻道公告:variant、目標、預估耗時、回滾計畫
  • [ ] 預先做完所有 plan check,確認無 error
  • [ ] 確認審批已完成
  • [ ] 對主要相關業務 owner 二次確認

T-30 min(窗口開始前 30 分鐘)

  • [ ] 在 #db-ops 公告窗口開始
  • [ ] 開啟監控 dashboard:
    • DB metrics(CPU / IOPS / connections / replication lag)
    • 業務指標(5xx / latency / 訂單成功率 ...)
  • [ ] 準備好回滾 SQL(人工確認過
  • [ ] 確認 on-call SRE 在線

T-0 開始執行

  • [ ] 由 DBA 啟動 Rollout(執行一個 rollout
  • [ ] 逐 stage 執行;每階段完成停下做以下檢查:
    • 該階段 task 全部 done
    • DB metrics 在合理範圍
    • 業務指標無異常
    • 持續 5 分鐘無問題 → 進下一階段
  • [ ] 任一異常 → STOP,啟動 緊急回滾

T+完成後

  • [ ] 在 #db-ops 公告窗口結束 + 結果
  • [ ] 在 Issue 留 comment:「✅ 窗口結束 / 變更生效 / 業務指標 OK」
  • [ ] 安排 24h 後 follow-up(看是否有延遲影響)

緊急窗口流程

只有以下情況可走:

  • Production 事故修補
  • 安全漏洞修補(CVE / 內部資安通報)
  • 法遵 / 緊急業務要求

程序:

  1. 取得 DBA Lead 口頭 + 文字 雙重簽核
  2. 在 #db-ops 公告開窗 + 原因
  3. 走標準執行 SOP(前述 T-0 步驟)
  4. 事後 24h 內補書面說明,含:為何不能等常規窗口、影響評估、後續預防

風險與不可逆動作

動作可逆?額外要求
CREATE INDEX CONCURRENTLY監控 IOPS
大表加欄位(default null)監控 CPU 一陣子
大表加欄位(default 值)視值而定用 backfill job,不一次 ALTER
DROP COLUMN先 mark unused 一個 sprint,再實際 drop
DROP TABLE先 rename + 監控引用,30 天後 drop
TRUNCATE強烈不建議;走 DELETE WHERE ...
UPDATEWHERE強烈不建議;分批 + idempotent

凍結期例外

需例外 → Settings → Maintenance Window → Request Override

  • 提交人 + 理由 + 替代方案
  • 由 admin(≥ 2 人)核可
  • override 紀錄寫進 audit log(severity = critical

演練

  • 上次演練:NaN
  • 頻率:每季一次
  • 演練內容:在 staging 模擬一次「窗口期 + 中途回滾」的完整流程

相關

Argus — 公司內部資料庫變更審計平台