關於BUFFER POOL的一些總結

litterbaby發表於2007-04-01
關於BUFFER POOL的一些總結[@more@]

關於BUFFER POOL的一些總結

BUFFER POOL有三個池組成:

BUFFER POOL KEEPRECYCLE組成。這三個池各有自己的演算法來更新存放池中的資料。

BUFFER POOL使用的是LRU演算法來存放資料塊,資料塊會根據訪問的頻率的多

少來決定在這個池中存放的時間。

KEEP使用的一直存放的演算法,將資料一直存放在這個池中,資料不會被清除出池,但是需要說的是所要存放的資料塊應該少於池本身的大小。而且存放的資料塊的內容一般是需要重複訪問的資料塊。

RECYCLE是存放不經常使用的資料塊,也就是說,這個池的演算法是不保留資料塊,當池本身的空間使用完後就會將資料塊清除出去。一般存放大表的資料塊,而這個大表是不經常使用的,或者是一個全表掃描。這裡需要注意的是這個池設計的大小應該是能夠保證在事務完成前所需要的資料塊還在記憶體中。

使用這三個池,我個人認為,應該在體系結構設計階段就應該考慮這個問題,也就是說,在建立表的時候就應該考慮這個問題。之所以使用其他兩個池來快取表中的資料,目的是為了減少BUFFER POOL的老化,KEEP的使用是比較好理解的,就是在記憶體中快取某個經常使用的表的資料。當然也是可以在DEFAULT池中CACHE

RECYCLE的使用就是不是很好理解了。其實對於一個很大的表,對這個表的訪問是隨機的,而且是不頻繁的,或者對這個表有全表掃描的操作,就可以使用這個池了,因為如果使用在DEFAULT中,勢必造成DEFAULT其他資料的老化。這樣就增加了系統的負擔。

其中,很大的表和不頻繁的訪問是必要條件。但是這個池的使用也是一個雙刃劍,因為假如這個池的大小設計的不合理的話,就是說如果太小,在事務的處理的過程中,所前期讀入到記憶體中的資料塊在事務未完成,而且還需要再次使用的時候被老化了,就需要再次從磁碟上讀出此塊。這樣就會造成效能問題。

關於CACHE的使用

這個設定就是將所需要快取的表的資料塊放置在LRU的最前端,之所以這樣做的目的是為了如對一個大的表進行全表掃描的話,就會將所讀入的資料塊放入DEFAULT中,就會造成這些資料塊的老化。這個主要是針對DEFAULT。對於Oracle推薦使用KEEP,因為KEEP Oracle說是更有效率。

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

相關文章