歸檔進程 (ARCH/ARCn) 在高負載系統中常成為效能瓶頸。本文提出三大實戰調優策略:增加 ARCn 進程數、加大 Redo Log 檔案、大量資料載入時暫停歸檔,並釐清 ARCn 與 DBWR 進程擴展的差異。
-- 初始化參數(靜態,需重啟)
LOG_ARCHIVE_MAX_PROCESSES = 4 -- 啟動 ARC0~ARC3,最大 30
建議:讓資料庫自動管理,除非明確知道歸檔長期滯後,才手動調大。過多 ARCn 會增加 CPU 切換開銷。
| 項目 | DBWR (Database Writer) | ARCn (Archiver) |
|---|---|---|
| 預設數量 | 1 | 1 |
| 擴展限制 | 受 CPU 核心數限制(1 DBWR : 1 CPU) | **無 CPU 限制**,單 CPU 也可跑多個 ARCn |
| 參數 | DB_WRITER_PROCESSES | LOG_ARCHIVE_MAX_PROCESSES |
| 工作性質 | 寫髒塊到資料檔(I/O 密集) | 複製 Redo Log 到歸檔目的地(I/O + 網路) |
SELECT trunc(first_time,'HH24') hr, count(*) switches
FROM v$log_history
WHERE first_time > sysdate-1
GROUP BY trunc(first_time,'HH24')
ORDER BY hr;
初始化載入 TB 級資料 → 大量 INSERT/DELETE/UPDATE → 產生海量 Redo → 極頻繁 Log Switch → ARCn 滿載 → LGWR 等待 → 整體吞吐崩潰。
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE NOARCHIVELOG;
ALTER DATABASE OPEN;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
-- 立即執行 Level 0 備份 (RMAN)
⚠️ 關閉歸檔期間**無法時間點恢復**,務必在極短窗口完成,且載入前後必做完整備份。
LOG_ARCHIVE_MAX_PROCESSES 設為 4~8(視負載)。V$ARCHIVE_DEST_STATUS 確認無錯誤/延遲。靈活運用這三大策略,可在不修改應用 SQL 的前提下,大幅降低歸檔對核心交易吞吐的干擾,是 DBA 必備的「不動聲色」調優絕招。