標籤:oracle
Oracle 學習之--Buffer Cache深入解析
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/40/BE/wKioL1PPVxOwPpjTAAL_LJN_ltc591.jpg" title="1.png" alt="wKioL1PPVxOwPpjTAAL_LJN_ltc591.jpg" />
伺服器處理序和資料庫緩衝區快取:
當伺服器需要塊時,需要按系列步驟讀取塊:
1、首先,伺服器使用散列函數檢查是否可以從緩衝區快取中獲得所需要的塊。如果找到緩衝區,則將它移動到LRU列表中遠離LRU末尾的另一端。這是邏輯讀取,因為沒有發生實際的I/O。如果在緩衝區快取中找不到緩衝區,則伺服器處理序(Server)必須從資料檔案中讀取。
2、對資料檔案進行讀取之前,伺服器處理序將搜尋LRU列表,以獲得閒置緩衝區。所有被伺服器處理序修改的緩衝區都放在檢查點隊列中。以便在檢查點期間寫出到磁碟。
3、如果檢查點的大小超出了其閾值,伺服器會發出訊號通知DBWn重新整理資料緩衝區快取中的髒資料緩衝區。如果伺服器在搜尋閾值內找不到閒置緩衝區,將發出訊號通知DBWn進行重新整理。
4、找到空閑緩衝區後,伺服器將塊從資料檔案中讀入到資料庫緩衝區快取中過的空閑緩衝區。Oracle伺服器處理序把緩衝區移動到LRU列表中遠離LRU末尾的位置。
5、如果對塊的讀取不一致,伺服器會由當前塊和復原段重建塊的早期版本。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/40/C2/wKiom1PPWf3QxLHpAAKvpcChYLg906.jpg" title="bu2.png" alt="wKiom1PPWf3QxLHpAAKvpcChYLg906.jpg" />
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 a20SQL> col KVITDSC for a50SQL> set linesize 120SQL> 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
2、Search Threshold Exceeded:如果在搜尋閾值範圍內,伺服器處理序在LRU列表中找不到空閑緩衝區,就會發出訊號通知DBWn重新整理檢查點隊列。DBWn則直接將檢查點隊列中的髒資料緩衝區全部寫出。
SQL> select KVITTAG,KVITVAL,KVITDSC,INST_ID from x$kvit where KVITTAG=‘kcbfsp‘;KVITTAG KVITVAL KVITDSC INST_ID-------------------- ---------- -------------------------------------------------- ------kcbfsp 40 Max percentage of LRU list foreground can scan for 1
3、LGWR Singals a Checkpoint:當LGWR發出訊號,指示檢查點已經發生時,DBWn將髒資料緩衝區從檢查點寫入到磁碟上。
SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- 5 1 952 10485760 2 YES INACTIVE 1360633 23-JUL-14 6 1 953 10485760 2 NO CURRENT 1360669 23-JUL-14SQL> alter system switch logfile;System altered.SQL> alter system switch logfile;System altered.SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- 5 1 954 10485760 2 YES INACTIVE 1360952 23-JUL-14 6 1 955 10485760 2 NO CURRENT 1360962 23-JUL-14日誌:Completed checkpoint up to RBA [0x3b9.2.10], SCN: 1360669Wed Jul 23 15:08:08 2014Beginning log switch checkpoint up to RBA [0x3ba.2.10], SCN: 1360952Thread 1 advanced to log sequence 954 Current log# 5 seq# 954 mem# 0: +DG1/prod/onlinelog/group_5.263.848858213 Current log# 5 seq# 954 mem# 1: +RCY1/prod/onlinelog/group_5.256.848858217Wed Jul 23 15:08:25 2014Thread 1 cannot allocate new log, sequence 955Checkpoint not complete Current log# 5 seq# 954 mem# 0: +DG1/prod/onlinelog/group_5.263.848858213 Current log# 5 seq# 954 mem# 1: +RCY1/prod/onlinelog/group_5.256.848858217Wed Jul 23 15:08:33 2014Completed checkpoint up to RBA [0x3ba.2.10], SCN: 1360952Wed Jul 23 15:08:34 2014Beginning log switch checkpoint up to RBA [0x3bb.2.10], SCN: 1360962Thread 1 advanced to log sequence 955 Current log# 6 seq# 955 mem# 0: +DG1/prod/onlinelog/group_6.264.848858253 Current log# 6 seq# 955 mem# 1: +RCY1/prod/onlinelog/group_6.257.848858259Wed Jul 23 15:08:36 2014Completed checkpoint up to RBA [0x3bb.2.10], SCN: 1360962
4、Alter Tablespace offline Temporary or Alter Tablespace Begin Backup:如果資料表空間被臨時離線更改,或者啟動了他的聯機備份,則DBWn會將資料表空間的髒資料緩衝區從檢查點隊列寫出到磁碟上。
5、Drop Object:刪除某個對象後,DBWn會首先將該對象髒資料緩衝區重新整理到磁碟上。
6、Clean Shutdown:(正常、立即或交易處理)
本文出自 “天涯客的blog” 部落格,請務必保留此出處http://tiany.blog.51cto.com/513694/1445105
Oracle 學習之--Buffer Cache深入解析