溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

DBWR,LGWR,CKPT,ARCH觸發(fā)條件總結(jié)

發(fā)布時間:2020-08-10 21:41:29 來源:ITPUB博客 閱讀:173 作者:羽化殘虹 欄目:建站服務器

DBWR寫磁盤數(shù)據(jù)觸發(fā)條件:

1) 當進程在輔助LRU鏈表和主LRU鏈表上掃描以查找可以覆蓋的buffer header[空閑緩沖區(qū)]時,如果已經(jīng)掃描的buffer header的數(shù)量到達一定的限度(由隱藏參數(shù):_db_block_max_scan_pct決定)時,觸發(fā)DBWR進程。_db_block_max_scan_pct表示已經(jīng)掃描的buffer header的個數(shù)占整個LRU鏈表上buffer header總數(shù)的百分比。這時,搜索可用buffer header的進程掛起,在v$session_wait中表現(xiàn)為等待“free buffer wait”事件,同時增加v$sysstat中的“dirty buffers inspected”的值。(can query by x$kvit)
2) 當DBWR在主LRUW鏈表上查找已經(jīng)更新完而正在等待被寫入數(shù)據(jù)文件的buffer header時,如果找到的buffer header的數(shù)量超過一定限度(由隱藏參數(shù):_db_writer_scan_depth_pct決定)時,DBWR就不再繼續(xù)往下掃描了,而轉(zhuǎn)到輔助LRUW鏈表上將其上的臟數(shù)據(jù)塊寫入數(shù)據(jù)文件。_db_writer_scan_depth_pct表示已經(jīng)掃描的臟數(shù)據(jù)塊的個數(shù)占整個主LRUW鏈表上buffer header總數(shù)的百分比。
3) 如果主LRUW鏈表和輔助LRUW鏈表上的臟數(shù)據(jù)塊的總數(shù)超過一定限度,也將觸發(fā)DBWR進程。該限度由隱藏參數(shù):_db_large_dirty_queue決定。
4) 發(fā)生增量檢查點(incremental checkpoint)或完全檢查點(complete checkpoint)時觸發(fā)DBWR。
5) 每隔三秒鐘啟動一次DBWR。
6) 將表空間設置為離線(offline)狀態(tài)時觸發(fā)DBWR。
7) 發(fā)出命令:alter tablespace … begin backup,從而將表空間設置為熱備份狀態(tài)時觸發(fā)DBWR。
8) 將表空間設置為只讀狀態(tài)時,觸發(fā)DBWR。
9) 刪除對象時(比如刪除某個表)會觸發(fā)DBWR。

LGWR寫聯(lián)機日志文件觸發(fā)條件:

1)超時(timeout)
當LGWR處于空閑狀態(tài)時,它依賴于rdbms ipc message等待,處于休眠狀態(tài),直到3秒超時時間到。
如果LGWR發(fā)現(xiàn)有redo需要寫出,那么LGWR將執(zhí)行寫出操作,log file parallel write等待事件將會出現(xiàn)。

2)閾值達到
只要一個進程在log buffer中分配空間,已經(jīng)使用的Log buffer的數(shù)量將被計算。如果使用的塊的
數(shù)量大于或等于_log_io_size參數(shù)設置,那么將會觸發(fā)LGWR寫操作。
如果此時LGWR未處于活動狀態(tài),那么LGWR將被通知去執(zhí)行后臺寫操作。
缺省的_log_io_size等于1/3 log buffer大小,上限值為1M,此參數(shù)在X$KSPPSV中顯示的0值,意為缺省值。
也就是,LGWR將在Min(1M,1/3 log buffer size)時觸發(fā)。注意此處的log buffer size是以log block來衡量的。
此值通常為512 bytes.

3)提交
當一個事物提交時,在redo stream中將記錄一個提交標志。
在這些redo被寫到磁盤上之前,這個事物是不可恢復的。所以,在事務返回成功標志給用戶前,必須等待LGWR寫完成。進程通知LGWR寫,并且以log file sync事件開始休眠,超時時間為1秒。
Oracle的隱含參數(shù)_wait_for_sync參數(shù)可以設置為false避免redo file sync的等待,但是就將無法保證事務的恢復性.注意,在遞歸調(diào)用(recursive calls)中的提交(比如過程中的提交)不需要同步redo直到需要返回響應給用戶。因此遞歸調(diào)用僅需要同步返回給用戶調(diào)用之前的最后一次Commit操作的RBA。

存在一個SGA變量用以記錄redo線程需要同步的log block number。
如果多個提交在喚醒LGWR之前發(fā)生,此變量記錄最高的log block number,在此之前的所有redo都將被寫入磁盤。
這有時候被稱為組提交(group commit).

4)在DBWR寫之前
如果DBWR將要寫出的數(shù)據(jù)的高RBA超過LGWR的on-Disk RBA,DBWR將post LGWR去執(zhí)行寫出。
在Oracle8i之前,此時DBWR將等待log file sync事件。
從Oracle8i開始,DBWR把這些Block放入一個defer隊列,同時通知LGWR執(zhí)行redo寫出,DBWR可以繼續(xù)執(zhí)行無需等待的數(shù)據(jù)寫出。

CKPT發(fā)送CHECKPOINT信號的觸發(fā)條件:

1)log_checkpoint_timeout時間達到
2)當前redo日志已經(jīng)寫夠log_checkpoint_internavl*操作系統(tǒng)塊大小
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進程日志歸檔觸發(fā)條件:
如果設置了自動歸檔模式,則日志切換時,由LGWR進程觸發(fā)ARCH進程進行歸檔。這是最常見的方式。
可以手工進行歸檔。使用命令:alter system archive log current表示啟動ARCH進程,從而對當前的日志文件進行歸檔。
如果ARCH進程在5分鐘以后還沒有接收到LGWR的通知,則發(fā)生超時,于是ARCH被喚醒以檢查是否存在需要歸檔的日志文件。ARCH通過讀取控制文件中的信息來決定是否需要歸檔以及應該歸檔哪些日志文件。但是在進行實例恢復或者介質(zhì)恢復的過程中,ARCH進程不會啟動。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI