Redo wastage產生的原因

litterbaby發表於2007-09-26
Redo wastage產生的原因[@more@]

Redo wastage產生的原因

v$sysstat中有一個統計是redo wastage,這個究竟是什麼意思,為什麼匯產生這個問題哪?reod wastage會對系統的效能產生影響嗎?

1、為什麼會產生redo wastage

我們都熟知產生的redo會先寫入到redo buffer中,然後Oracle中的LGWR程式會根據某些觸發條件將redo buffer中的redo寫入到redo檔案中。redo檔案一般塊是512,除去每個塊有16位元組的塊頭,真正能夠使用的部分51216。而redo檔案在邏輯上是有redo record組成。LGWR寫入redo的時候,會在redo檔案中留下一些沒有使用的空間,例如圖:

這部分看見的產生主要願意是因為在LGWR寫入redo檔案的時候,需要釋放redo allocation latch,而在釋放之前,由於系統的事務需要不停進行,既然要進行就需要不停產生事務redo,而這些redo也是需要不能中斷寫入到redo buffer中,如果不能這樣的話,系統就會等待,就會停滯。所以在釋放之前必須給隨後的redo寫一個新的buffer空間的起始位置。而這個其實位置就是存放在SGA中的fixed area中的一個index(應該是一個指標)。這個index就是告訴Oracle redo buffer寫的起始位置。在分配這個index的時候,oracle會跳過當前已經使用塊,在下一個沒有使用的塊上分配,而LGWR寫的時候也是一塊一塊寫入到redo檔案中,相應的這部分沒有完全使用的塊也是按照原來的情況寫入到redo檔案中,這就造成現在這種redo wastage的狀態。

2redo wastage過多的原因

redo wastage的產生是正常的現象,但是如果redo wastage過多的情況產生的話就可以有問題了,這就說明LGWR過於頻繁。而LGWR過於頻繁的結果是需要過多的再如redo latchredo寫的IO。因為LGWR寫的觸發條件是:

n 1/3 buffer被使用

n commit

n redo size > 1M

n DBWR

可以從redo buffer的大小和commit次數來著手。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/222350/viewspace-972511/,如需轉載,請註明出處,否則將追究法律責任。

相關文章