Redo Log Buffer 是 Oracle 例項啟動時固定分配的共享記憶體區域,所有異動操作產生的 Redo Entry 先寫入此緩衝區,再由 LGWR 批次刷入線上 Redo Log 檔案。緩衝區大小由初始化參數 LOG_BUFFER 控制。本文揭示「1% 門檻」判斷法,教你精準決定是否調整。
log buffer space 事件,嚴重拖慢 DML 效能| 誤區 | 真相 |
|---|---|
| Log Buffer 越大效能越好 | 過大導致: 1. 佔用 SGA 記憶體,擠壓 Buffer Cache/Shared Pool 2. LGWR 刷盤頻率降低,故障恢復時需掃描更多 Redo,延長恢復時間 (MTTR) 3. 記憶體浪費 (即使僅用 1% 也獨佔) |
| 統計名稱 | 統計名稱 | 含義 |
|---|---|---|
| redo buffer allocation retries | Redo 緩衝區重分配次數 | 用戶進程因 Log Buffer 滿而等待的總次數 |
| redo entries | Redo 項目數 | 產生的 Redo Entry 總數 (近似 DML 執行次數) |
redo buffer allocation retries / redo entries > 1% (0.01)
LOG_BUFFERSELECT
a.value AS retries,
b.value AS entries,
ROUND(a.value / NULLIF(b.value,0) * 100, 2) AS retry_pct
FROM v$sysstat a, v$sysstat b
WHERE a.name = 'redo buffer allocation retries'
AND b.name = 'redo entries';
SHOW PARAMETER log_buffer;
-- 僅記憶體生效
ALTER SYSTEM SET log_buffer = 50M SCOPE=MEMORY;
-- 同時寫入 SPFILE (下次重啟生效)
ALTER SYSTEM SET log_buffer = 50M SCOPE=BOTH;
redo buffer allocation retries / redo entries 納入日常巡檢儀表板log buffer space 等待事件時間分析根因Redo Log Buffer 不是越大越好。 以 V$SYSSTAT 兩大核心指標計算重試率,1% 為決策關口。科學調優,兼顧效能與恢復時間目標 (RTO)。