交易機制回顧
Oracle 以交易確保資料一致性:多步操作視為單一整體,任一失敗全數回滾。但不當設計會導致長時間鎖定、嚴重降低並發效能。
四大指導原則
原則一:最小化存取記錄數
- UPDATE/DELETE 會鎖定受影響列,記錄越多鎖衝突機率越高
- 善用 WHERE 子句精準定位,理想為一對一
- 大量作業(如盤點)建議前端加入分類過濾條件,分批處理
原則二:保持交易簡潔(時間維度)
- 交易執行時間越長,鎖定資源越久,並發影響越大
- 確知需修改資料後才啟動交易,最短時間內完成提交/回滾
- 拆分長交易:大量更新改為分欄位、分批次、離峰時段背景執行
原則三:交易期間禁止等待使用者輸入
- 人類反應速度遠慢於電腦,等待輸入會長時間佔用鎖資源
- 錯誤設計:開啟訂單修改畫面即啟動交易 → 使用者猶豫一小時 → 整張訂單被鎖
- 正確設計:使用者點擊「確認」按鈕時才啟動交易,所有參數已備齊
原則四:瀏覽資料時勿開啟交易
- 使用者大部分時間在分析、查詢、猶豫,非實際修改
- 僅在使用者確認無誤點擊「更新」按鈕瞬間啟動交易,即時提交/回滾
- 事後審核階段交易不再佔用資源
補充細節
- 採用最低必要隔離等級,非所有交易需 SERIALIZABLE
- 交易設計越短越好
- 回滾策略:視情況選擇全數或部分回滾
- 警惕排他鎖副作用:合理選擇啟動時機,兼顧安全與效能