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進程不會啟動。
?
?
轉載自: http://space.itpub.net/23071790/viewspace-692142
?
?
?
-------------------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
Email: dvd.dba@gmail.com
DBA1 群:62697716(滿);?? DBA2 群:62697977(滿)?? DBA3 群:62697850(滿)??
DBA 超級群:63306533(滿);? DBA4 群: 83829929? DBA5群: 142216823???
DBA6 群:158654907? 聊天 群:40132017?? 聊天2群:69087192
--加群需要在備注說明Oracle表空間和數據文件的關系,否則拒絕申請
轉載于:https://www.cnblogs.com/Hiberniane/archive/2011/06/29/2488406.html
總結
以上是生活随笔為你收集整理的Oracle DBWR,LGWR,CKPT,ARCH 触发条件 总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP三次握手及四次挥手详细图解
- 下一篇: wpf创建动画示例