Oracle教程:Redo write觸發(fā)的四種情況 |
發(fā)布時(shí)間: 2012/7/27 17:41:21 |
1、當(dāng)LGWR空閑的時(shí)候,會(huì)每隔3秒檢查一次是否有從redo buffer寫(xiě)入redelog中的數(shù)據(jù),如果有,一個(gè)后臺(tái)進(jìn)程就會(huì)自動(dòng)的執(zhí)行將其寫(xiě)入 2、當(dāng)有進(jìn)程要從redo buffer中分配空間時(shí),會(huì)先計(jì)算redo buffer中已經(jīng)占用的空間,如果該空間大于_log_io_size這個(gè)參數(shù)值,并且此時(shí)的LGWR處于空閑狀態(tài),便會(huì)被激活執(zhí)行后臺(tái)寫(xiě)。_log_io_size的默認(rèn)值是redo buffer大小的三分之一,從8.0開(kāi)始,_log_io_size 的上限值是1M,和其他的hidden參數(shù)一樣,如果沒(méi)明確的設(shè)置,在X$KSPPSV視圖中查出的值為0 3、當(dāng)一個(gè)事物commit時(shí),會(huì)產(chǎn)生一個(gè)commit標(biāo)志在redo流中,在redo buffer中的log包括commit標(biāo)志寫(xiě)入硬盤(pán)之前,這個(gè)事物是不可恢復(fù)的,因此在給用戶(hù)返回類(lèi)似‘Commit complete’之前,必須等待LGWR將redo buffer中寫(xiě)入硬盤(pán),在commit后會(huì)激活LGWR并且sleeps on a log file sync wait with a timeout of 1 second。為了避免等待 可以將_wait_for_sync 參數(shù)設(shè)置成false,但是這樣就不能保證已經(jīng)commit的的事物實(shí)例失敗時(shí)可以恢復(fù)。 _log_io_size 和 _wait_for_sync 都是隱藏參數(shù),可以通過(guò)下面的sql查看其值 1.select i.ksppinm name, i.ksppdesc description, cv.ksppstvl value, 一個(gè)SGA變量(kcrfshsb, according to bug 182447)是用來(lái)確定最大的需要同步的log block號(hào),當(dāng)LGWR處于激活的狀態(tài)過(guò)程中即正在像disk中寫(xiě)時(shí),幾個(gè)不同的實(shí)例事物執(zhí)行commit操作,kcrfshsb 變量記錄了需要同步的最高塊號(hào),這些commit會(huì)全部寫(xiě)入disk中在一次redo write中,稱(chēng)為group commit 4、當(dāng)DBWn需要寫(xiě)入一個(gè)或多個(gè)塊的high RBA ,并且high rba超出了on-disk RBA時(shí),從Oracle 8i開(kāi)始DWBn將這些塊放入延遲隊(duì)列并且post LGWR來(lái)同步最高的RBA,但是不會(huì)等待,DBWn會(huì)繼續(xù)執(zhí)行其他的不需要延遲的寫(xiě),在8i以前,DBWn會(huì)sleep發(fā)生a log file sync wait。 本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |