標籤: 運維

共 2 篇

Go 專案的資料庫遷移:手寫 .sql 檔案,一次變更怎麼走到生產

2026年10月21日

Go 服務新版本上線,日誌裡刷出 column "coupon_code" does not exist:加列的 SQL 寫了,生產庫沒人執行。順著這個現象往下追:手寫的 .sql 檔案怎麼交給 golang-migrate 和 goose 去執行,執行到一半失敗了庫裡留下什麼,兩個分支各加一個檔案時會不會漏掉一個,一個 .sql 從提交、CI、打包到部署要走哪幾步、由誰來執行,一條只改後設資料的 ALTER 為什麼能把整張表堵住,新舊程式碼同時線上時列名怎麼跨幾個版本改,只宣告終態讓 Atlas、sqldef、pg-schema-diff、Skeema 自動算變更行不行,最後是 down 檔案到底能不能用來回滾。

SSAR 與同類工具對比:一次 30 秒的 load 尖峰,事後還能看清嗎

2026年10月21日

一臺 4 核機器在 22:31 抖了半分鐘,幾分鐘後登入上去,load average 已經回落,一切正常。為了弄清剛才發生了什麼,我們把龍蜥社群的 SSAR 和 sar、atop、below、PCP、collectl、nmon、tsar 裝在同一臺機器上,用同一個尖峰去考它們:預設取樣點有沒有落進去,load1 為什麼總是慢半拍,SSAR 的 load5s 怎麼從 /proc/loadavg 反推出每 5 秒的真實執行緒數,卡在 D 狀態的是哪個程序、哪個執行緒、卡在核心哪一行,事後才想到的指標還能不能查,以及這些記錄各要花多少 CPU 和磁碟。