Oracle 學習之--Buffer Cache深入解析
Oracle 學習之--Buffer Cache深入解析
伺服器處理序和資料庫緩衝區快取:
當伺服器需要塊時,需要按系列步驟讀取塊:
1、首先,伺服器使用散列函數檢查是否可以從緩衝區快取中獲得所需要的塊。如果找到緩衝區,則將它移動到LRU列表中遠離LRU末尾的另一端。這是邏輯讀取,因為沒有發生實際的I/O。如果在緩衝區快取中找不到緩衝區,則伺服器處理序(Server)必須從資料檔案中讀取。
2、對資料檔案進行讀取之前,伺服器處理序將搜尋LRU列表,以獲得閒置緩衝區。所有被伺服器處理序修改的緩衝區都放在檢查點隊列中。以便在檢查點期間寫出到磁碟。
3、如果檢查點的大小超出了其閾值,伺服器會發出訊號通知DBWn重新整理資料緩衝區快取中的髒資料緩衝區。如果伺服器在搜尋閾值內找不到閒置緩衝區,將發出訊號通知DBWn進行重新整理。
4、找到空閑緩衝區後,伺服器將塊從資料檔案中讀入到資料庫緩衝區快取中過的空閑緩衝區。Oracle伺服器處理序把緩衝區移動到LRU列表中遠離LRU末尾的位置。
5、如果對塊的讀取不一致,伺服器會由當前塊和復原段重建塊的早期版本。
Oracle 如何強制重新整理Buffer Cache
Buffer cache和page cache的區別
Linux中Buffer cache效能問題一探究竟
Oracle BUFFER CACHE研究
Oracle Buffer Cache最佳化思路 與
DBWn進程和資料庫緩衝區快取:
DBWn將髒資料區塊寫入資料檔案,以確保伺服器有空閑塊,並以此來管理緩衝區快取。DBWn響應執行個體中不同的事件:
1、Checkpoint Queue Exceeds Threshold:如果伺服器處理序發現檢查點隊列的大小超出其閾值,就會發出訊號通知DBWn進行重新整理。DBWn則將檢查點隊列中的緩衝區全部寫出。
當檢查點隊列25%滿就會觸發DBWn的寫操作:
SQL> desc x$kvit
Name Null? Type
----------------------------------------- -------- ----------------------------
ADDR RAW(8)
INDX NUMBER
INST_ID NUMBER
KVITVAL NUMBER
KVITTAG VARCHAR2(64)
KVITDSC VARCHAR2(64)
SQL> col KVITTAG for a20
SQL> col KVITDSC for a50
SQL> set linesize 120
SQL> select KVITTAG,KVITVAL,KVITDSC,INST_ID from x$kvit where KVITTAG='kcbldq';
KVITTAG KVITVAL KVITDSC INST_ID
-------------------- ---------- -------------------------------------------------- ------
kcbldq 25 large dirty queue if kcbclw reaches this 1
更多詳情見請繼續閱讀下一頁的精彩內容: