Oracle 10g 啟用閃回功能時,會在 Shared Pool 內分配 Flashback Generation Buffer。本文通過啟動日誌分析、動態效能視圖查詢、參數調整實測,深度探究其分配機制、大小控制與調優策略。
資料庫啟動日誌明確記錄 Flashback Buffer 分配於 Shared Pool:
Wed Dec 30 15:20:40 2009
Allocated 3981204 bytes in shared pool for Flashback generation buffer
Starting background process RVWR
RVWR started with pid=16, OS id=724
透過 V$SGASTAT 驗證:
SELECT name, bytes
FROM v$sgastat
WHERE pool = 'shared pool'
AND name LIKE '%Flash%';
NAME BYTES
----------------------- ----------
Flashback generation buff 3981204
實測將 LOG_BUFFER 從 7MB 調整至 10MB 並重啟資料庫:
ALTER SYSTEM SET log_buffer = 10000000 SCOPE = SPFILE;
STARTUP FORCE;
重啟後再次查詢 V$SGASTAT,Flashback Generation Buffer 仍維持 3981204 bytes,證實其大小不受 LOG_BUFFER 參數控制。
Flashback buf free by RVWR 等待事件,影響效能後續研究可聚焦於以下隱含參數(需謹慎測試):
_flashback_generation_buffer_size(推測名稱)_rvwr_dequeue_timeout 等 RVWR 相關參數注意:隱含參數調整需 Oracle 支援協助,生產環境嚴禁盲目嘗試。
V$SYSTEM_EVENT 關注 Flashback buf free by RVWRFlashback Buffer 固定分配於 Shared Pool,大小由內部演算法決定,不受 LOG_BUFFER 影響。缺乏直接調整手段是當前主要痛點,DBA 應透過整體 Shared Pool 規劃與 RVWR 監控來間接保障閃回效能。