- 論壇徽章:
- 0
|
晶晶實(shí)驗(yàn)十二 相關(guān)重做的等待事件
一,下面共描述了12個直接相關(guān)日志的等待事件,但只有前面幾個是值得注意的.
1,log file parallel write
當(dāng)日志緩存到日志文件時,這是一個主要的等待事件.雖然這個時間的名字中有"并行"(parallel)字樣,但即使日志緩存并沒有使用并行寫,因日志緩存的寫出而造成的等待仍然是此等待事件.
我們可以通過v$system_event來了解下某一個階段內(nèi),此等待事件的平均等待時間.通過此時間值,來評估我們的日志I/O是否正常.有資料介紹當(dāng)log file parallel write的平均等待時間大于10毫秒時.有可能就表明著日志的吞吐量緩慢.我認(rèn)為這只是一個參考值,在不同的系統(tǒng)上要根據(jù)不同的情況來決定.記錄一些在正常情況下log file parallel write等待事件的平均等待時間,當(dāng)出現(xiàn)問題后,以此時間作為是否有問題的標(biāo)準(zhǔn).這種方法也是可取的.
當(dāng)日志I/O確實(shí)有問題時,減少重做產(chǎn)生的數(shù)量,確實(shí)能夠緩解log file parallel write的等待時間.但有時,重做信息的數(shù)量是無法減少的.根據(jù)情況,將日志I/O轉(zhuǎn)移到更快速的磁盤上,也是解決問題的方法之一.
日志緩存的大小,有時候也會對此等待事件產(chǎn)生影響.如果你的日志緩存更大,會降低LGWR刷新緩存到磁盤的次數(shù),增大日志的緩存,也會有助于緩解此等待事件.但過大的日志緩存,有可能會造成LGWR間歇性的擁堵.因?yàn)長GWR被觸發(fā)的條件之一是日志緩存滿1/3,如果日志緩存過大,1/3的日志緩存數(shù)量可能過多,每次LGWR被觸發(fā),不得不寫大量數(shù)據(jù),這造成LGWR間歇性的停頓與擁堵,這也會增加此等待事件的等待時間.我們可以通過設(shè)置隱藏參數(shù)_log_io_size來改變?nèi)罩揪彺鏉M1/3才觸發(fā)LGWR的闕值.通過設(shè)置此參數(shù),我們即可以擁有較大的日志緩存,又避免了LGWR間歇性的停頓或擁堵.
我沒有在生產(chǎn)庫中使用過這個參數(shù),因?yàn)樗吘故且粋隱藏參數(shù).雖然據(jù)說他不會帶來什么bug.在我的測試機(jī)上,通過調(diào)節(jié)這個參數(shù),確實(shí)可以對性能略有提升.但這些都是為數(shù)據(jù)庫的"微調(diào)".不可能帶來大幅度的性能提升.
LGWR 在刷新緩存時,需要redo allocation和redo writing閂,并且LGWR需要等待一些redo copy 閂的完成.因此,如果這些閂的爭用較高,則不要減少_log_io_size此隱藏參數(shù),因?yàn)闇p少它,將會使LGWR更為頻繁的刷新緩存.這會進(jìn)一步加劇這3個閂的爭用.減緩LGWR完成工作的速度.
**小小結(jié):日志緩存到底應(yīng)該設(shè)置為多大??_log_io_size參數(shù)的值應(yīng)該定為多少??這沒有一個統(tǒng)一的標(biāo)準(zhǔn),只有通過多做測試才能決定.
2,log file sync
此等待事件用戶發(fā)出提交或回滾聲明后,等待提交完成的事件,提交命令會去做日志同步,也就是寫日志緩存到日志文件, 在提交命令未完成前,用戶將會看見此等待事件,注意,它專指因提交,回滾而造成的寫緩存到日志文件的等待.當(dāng)發(fā)生此等待事件時,有時也會伴隨log file parallel write.因?yàn)榇说却录䦟䦟懭罩揪彺,如果日志的I/O系統(tǒng)較為緩慢的話,這必將造成log file parallel write 等待.當(dāng)發(fā)生log file sync等待后,判斷是否由于緩慢的日志I/O造成的,可以查看兩個等待事件的等待時間,如果比較接近,就證明日志I/O比較緩慢或重做日志過多,這時,造成log file sync的原因是因?yàn)閘og file parallel write,可以參考解決log file parallel write的方法解決問題,如果log file sync的等待時間很高,而log file parallel write的等待時間并不高,這意味著log file sync的原因并不是緩慢的日志I/O,而是應(yīng)用程序過多的提交造成的.
3,log buffer space
服務(wù)器進(jìn)程生成重做記錄的速度快過LGWR寫出重做記錄的速度,因而發(fā)生等待.日志I/O緩慢是log buffer space等待的主要原因之一.還有一點(diǎn),如果日志緩存區(qū)過小,也容易出現(xiàn)此等待事件.將日志緩存設(shè)置的大一些,對于緩解此事件的等待會有幫助.但是,過大的日志緩存,又會降低LGWR刷新緩存的頻率,這可能會使提交時必須刷新的緩存數(shù)量增多.從而造成log file sync等待.日志緩存具體應(yīng)該設(shè)置為多大,這就多進(jìn)行測試咯.不同的環(huán)境下,不可能有一個標(biāo)準(zhǔn).為了緩解log buffer space等待事件,將日志緩存調(diào)節(jié)的比較大之后,可以通過_log_io_size參數(shù)來提高LGWR刷新緩存的頻率.這樣做既可以減少log buffer space的等待,也可以減少log file sync等待.但這樣的隱藏參數(shù) 應(yīng)該小心使用.
4,log file switch(checkpoint incomplete)
在日志切換時,會完成一個檢查點(diǎn)操作,如果此檢查點(diǎn)完成的過于緩慢,就會造成此事件的等待,檢查點(diǎn)為什么會緩慢呢?可能是buffer cache太大因此容納的臟塊太多,DBWR進(jìn)程太少,調(diào)整檢查點(diǎn)頻率的參數(shù)設(shè)置頻率太低等原因造成的.
5,log file switch(archiving needed)
在日志切換時,下一日志文件還沒被歸檔完成,此時所有的數(shù)據(jù)庫DML操作都停止下來,等待下一日志文件可用,至于原因,很簡單,歸檔進(jìn)程太慢或日志切換太快,再問為什么切換太快?日志文件太小或生成的重做太多.
6,log file switch(clearing log file)
這發(fā)生在DBA發(fā)布alter system clear log file命令.且LGWR正需要切換到被清空的日志文件.等待時間是1秒.
7,log file switch completion
當(dāng)一個日志文件滿了,oracle要打開另一個日志文件,寫完上一日志文件,準(zhǔn)備好下一日志文件,這之間的等待就是此等待事件了,簡單點(diǎn)說,就是為了完成日志文件切換而發(fā)生的等待.
8,switch log file command
執(zhí)行日志文件切換命令的時候等待日志文件切換完成.超時時間為5秒.
9,log switch/archive
當(dāng)DBA手動輸入命令alter system archive log change<SCN>時,可能會等待此事件.
10,log file sequential read
等待從日志文件中讀,一般ARC進(jìn)程會遭遇此事件,如果P3參數(shù)為1,證明等待發(fā)生在讀日志文件頭,否則,P3代表要讀出的日志塊的數(shù)量.
11,log file single write
日志文件寫等待,注意,這里所指的寫,并不是從日志緩存寫到日志文件,這里的寫并不涉及日志緩存,此事件只代表寫日志文件頭時發(fā)生的等待.有兩種情況日志文件頭被寫:當(dāng)添加新的成員文件或日志序列號增加.應(yīng)對日志文件盡量使用裸設(shè)備.或避免將日志文件放在同一磁盤上,以減少此事件產(chǎn)生的可能.
12,LGWR wait for redo copy
LGWR將要寫一組日志塊,但它必須等待直到服務(wù)器進(jìn)程完成任意當(dāng)前的拷貝操作,這些拷貝操作影響將要被寫出的緩存. |
|