Appearance
高風險變更窗口
這是什麼 對 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 分鐘無問題 → 進下一階段
- 該階段 task 全部
- [ ] 任一異常 → STOP,啟動 緊急回滾
T+完成後
- [ ] 在
#db-ops公告窗口結束 + 結果 - [ ] 在 Issue 留 comment:「✅ 窗口結束 / 變更生效 / 業務指標 OK」
- [ ] 安排 24h 後 follow-up(看是否有延遲影響)
緊急窗口流程
只有以下情況可走:
- Production 事故修補
- 安全漏洞修補(CVE / 內部資安通報)
- 法遵 / 緊急業務要求
程序:
- 取得 DBA Lead 口頭 + 文字 雙重簽核
- 在 #db-ops 公告開窗 + 原因
- 走標準執行 SOP(前述 T-0 步驟)
- 事後 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 ... |
UPDATE 無 WHERE | 否 | 強烈不建議;分批 + idempotent |
凍結期例外
需例外 → Settings → Maintenance Window → Request Override:
- 提交人 + 理由 + 替代方案
- 由 admin(≥ 2 人)核可
- override 紀錄寫進 audit log(severity =
critical)
演練
- 上次演練:NaN
- 頻率:每季一次
- 演練內容:在 staging 模擬一次「窗口期 + 中途回滾」的完整流程