Oracle DBWR,LGWR,CKPT,ARCH 觸發條件 總結
一. DBWR寫磁碟資料觸發條件
1. 當程式在輔助LRU連結串列和主LRU連結串列上掃描以查詢可以覆蓋的buffer header[空閒緩衝區]時,如果已經掃描的buffer header的數量到達一定的限度(由隱藏引數:_db_block_max_scan_pct決定)時,觸發DBWR程式。 _db_block_max_scan_pct表示已經掃描的buffer header的個數佔整個LRU連結串列上buffer header總數的百分比。這時,搜尋可用buffer header的程式掛起,在v$session_wait中表現為等待“free buffer wait”事件,同時增加v$sysstat中的“dirty buffers inspected”的值。(can query by x$kvit)
這部分內容在我的Blog裡也有說明:
Oracle Buffer Cache 原理
http://blog.csdn.net/tianlesoftware/archive/2011/06/28/6573438.aspx
2. 當DBWR在主LRUW連結串列上查詢已經更新完而正在等待被寫入資料檔案的buffer header時,如果找到的buffer header的數量超過一定限度(由隱藏引數:_db_writer_scan_depth_pct決定)時,DBWR就不再繼續往下掃描了,而轉到輔助LRUW連結串列上將其上的髒資料塊寫入資料檔案。_db_writer_scan_depth_pct表示已經掃描的髒資料塊的個數佔整個主LRUW連結串列上buffer header總數的百分比。
3. 如果主LRUW連結串列和輔助LRUW連結串列上的髒資料塊的總數超過一定限度,也將觸發DBWR程式。該限度由隱藏引數:_db_large_dirty_queue決定。
4. 發生增量檢查點(incremental checkpoint)或完全檢查點(complete checkpoint)時觸發DBWR。
5. 每隔三秒鐘啟動一次DBWR。
6. 將表空間設定為離線(offline)狀態時觸發DBWR。
7. 發出命令:alter tablespace … begin backup,從而將表空間設定為熱備份狀態時觸發DBWR。
8. 將表空間設定為只讀狀態時,觸發DBWR。
9. 刪除物件時(比如刪除某個表)會觸發DBWR。
二. LGWR寫聯機日誌檔案觸發條件
1. 超時(timeout)
當LGWR處於空閒狀態時,它依賴於rdbms ipc message等待,處於休眠狀態,直到3秒超時時間到。 如果LGWR發現有redo需要寫出,那麼LGWR將執行寫出操作,log file parallel write等待事件將會出現。
2. 閾值達到
只要一個程式在log buffer中分配空間,已經使用的Log buffer的數量將被計算。如果使用的塊的數量大於或等於_log_io_size引數設定,那麼將會觸發LGWR寫操作。
如果此時LGWR未處於活動狀態,那麼LGWR將被通知去執行後臺寫操作。
預設的_log_io_size等於1/3 log buffer大小,上限值為1M,此引數在X$KSPPSV中顯示的0值,意為預設值。也就是,LGWR將在Min(1M,1/3 log buffer size)時觸發。
注意此處的log buffer size是以log block來衡量的。此值通常為512 bytes.
3. 提交
當一個事物提交時,在redo stream中將記錄一個提交標誌。
在這些redo被寫到磁碟上之前,這個事物是不可恢復的。所以,在事務返回成功標誌給使用者前,必須等待LGWR寫完成。程式通知LGWR寫,並且以log file sync事件開始休眠,超時時間為1秒。
Oracle的隱含引數_wait_for_sync引數可以設定為false避免redo file sync的等待,但是就將無法保證事務的恢復性.注意,在遞迴呼叫(recursive calls)中的提交(比如過程中的提交)不需要同步redo直到需要返回響應給使用者。因此遞迴呼叫僅需要同步返回給使用者呼叫之前的最後一次Commit操作的RBA。
存在一個SGA變數用以記錄redo執行緒需要同步的log block number。
如果多個提交在喚醒LGWR之前發生,此變數記錄最高的log block number,在此之前的所有redo都將被寫入磁碟。這有時候被稱為組提交(group
commit).
4. 在DBWR寫之前
如果DBWR將要寫出的資料的高RBA超過LGWR的on-Disk RBA,DBWR將post LGWR去執行寫出。
在Oracle8i之前,此時DBWR將等待log file sync事件。
從Oracle8i開始,DBWR把這些Block放入一個defer佇列,同時通知LGWR執行redo寫出,DBWR可以繼續執行無需等待的資料寫出。
三. CKPT傳送CHECKPOINT訊號的觸發條件
1. log_checkpoint_timeout時間達到
2. 當前redo日誌已經寫夠log_checkpoint_internavl*作業系統塊大小
3. redo log
switch
4. alter system
checkpoint
5. alter tablespace
XXX begin backup,end backup的時候
6. alter
tablespace , datafile offline, shutdown immediate, direct
read的時候;
四. ARCH程式日誌歸檔觸發條件
1. 如果設定了自動歸檔模式,則日誌切換時,由LGWR程式觸發ARCH程式進行歸檔。這是最常見的方式。
2. 可以手工進行歸檔。使用命令:alter system archive log current表示啟動ARCH程式,從而對當前的日誌檔案進行歸檔。
3. 如果ARCH程式在5分鐘以後還沒有接收到LGWR的通知,則發生超時,於是ARCH被喚醒以檢查是否存在需要歸檔的日誌檔案。ARCH透過讀取控制檔案中的資訊來決定是否需要歸檔以及應該歸檔哪些日誌檔案。但是在進行例項恢復或者介質恢復的過程中,ARCH程式不會啟動。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/751371/viewspace-777066/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DBWR,LGWR,CKPT,ARCH觸發條件總結
- Oracle DBWR,LGWR,CKPT,ARCH 觸發條件Oracle
- DBWR,LGWR,CKPT,ARCH等常見後臺程式觸發條件彙總
- Oracle DBWR觸發條件Oracle
- Oracle9i CKPT 觸發條件Oracle
- Oracle9i LGWR 觸發條件Oracle
- oracle實驗記錄(buffer_cache分析(4)dbwr,lgwr,ckpt)Oracle
- 觸發CKPT(checkpoint)程式的幾個條件
- 觸發LGWR程式寫日誌的4個條件
- PMON、SMON、DBWn、LGWR、CKPT、ARCH等後臺程式說明
- 總結Minor GC、Full GC觸發條件GC
- DBWn,CKPT,LGWR程式
- oracle checkpoint 觸發的9個條件Oracle
- Oracle9i DBWn 觸發條件Oracle
- oracle實驗記錄 (CKPT的觸發)Oracle
- 觸發DBWR程式寫髒資料塊到資料檔案的幾個條件
- LGWR DBWR SMON 等程式說明
- oracle 的伺服器程式(PMON, SMON,CKPT,DBWn,LGWR,ARCn)Oracle伺服器
- 幾個程式觸發條件(zt)
- DBWn程式觸發4個條件
- CKPT、DBWn、LGWR與3S的關係
- 【Oracle】-【體系結構-DBWR】-DBWR程式相關理解Oracle
- Shell 條件判斷總結
- oracle中各程式的觸發條件(希望對大家有幫助) (zt)Oracle
- 【Oracle】-【體系結構-LGWR】-LGWR的一些理解Oracle
- DB2頁清除的幾個觸發條件DB2
- 前端迴流與重繪:概念及觸發條件前端
- SQL總結(六)觸發器SQL觸發器
- Oracle DBWR程式Oracle
- Odoo Domain條件表示式寫法總結OdooAI
- 圖解JVM實驗-觸發FullGC的幾個條件圖解JVMGC
- SAP工作流觸發總結
- Oracle LGWR程式Oracle
- Rust 交叉編譯與條件編譯總結Rust編譯
- 總結在SQL Server檢視管理中限制條件SQLServer
- 資料寫過程中各項觸發條件及邏輯
- Oracle CKPT再複習Oracle
- 資料庫Standby中的幾個概念 - LGWR, ARCH,ASYNC,SYNC,AFFIRM資料庫