在 Oracle 資料庫中,INSERT、UPDATE、DELETE 是最常見的資料操作語句(DML)。當資料量龐大時,這些操作往往耗時驚人,即使邏輯簡單(如將價格一律上調 10%),執行時間仍主要取決於「受影響的列數」而非「修改內容的複雜度」。本文提供兩大優化策略,助您在效能與資料安全間取得平衡。
預設情況下,每筆 DML 操作都會同步寫入重做日誌,確保可復原。若啟用 NOLOGGING,資料庫將只修改資料塊,不產生重做記錄,理論上可將執行速度提升一倍,受影響列數越多效果越明顯。
DBA 必須評估風險並制定備份策略(如操作前完整備份)再行採用。
大量 DML 會快速填滿線上重做日誌,觸發日誌切換與歸檔。若日誌檔案過小,頻繁切換會導致 LGWR 等待 ARCH 完成歸檔,嚴重拖慢效能。
V$LOG_HISTORY 或比對作業系統層面的日誌檔案修改時間,判斷是否過於頻繁(建議間隔 30–40 分鐘)。ALTER DATABASE ADD LOGFILE 建立大尺寸日誌組,再刪除舊的小日誌成員(保留日誌組編號不變)。將重做日誌置於高效能磁碟或 RAID 陣列,可進一步提升寫入吞吐。
| 策略 | 優點 | 缺點 | 建議場景 |
|---|---|---|---|
| NOLOGGING | 速度提升顯著(理論 2 倍) | 不可復原,資料安全風險高 | 可重跑的大量載入、臨時表操作 |
| 調大 Redo Log | 兼顧效能與可復原性 | 效能增幅較小,需規劃儲存空間 | 核心業務大量更新、生產環境常態優化 |
DBA 應根據業務對資料安全的容忍度,選擇或組合上述策略。