Ask Hoegh(5)——buffer cache和buffer有什麼區別?

路途中的人2012發表於2017-07-29
問:
Oracle資料庫的SGA包含db block buffer cache和redo buffer等元件,那麼,同樣屬於記憶體,buffer cache和buffer有區別嗎?

答:首先我們對比一下db block buffer cache和redo buffer的概念和功能。

buffer cache,其中文名稱為緩衝器高速緩衝儲存器。按照oracle官方的說法,buffer cache就是一塊含有許多資料塊的記憶體區域,而這些資料塊主要都是資料檔案裡的資料塊內容的複製。
由於buffer cache位於物理檔案系統和塊裝置驅動程式之間,因此,當物理檔案系統需要從塊裝置上讀取資料時,它首先試圖從buffer cache中去讀。如果命中,則核心就不必在去訪問慢速的塊裝置。否則如果命中失敗,也即資料不在buffer cache中,則核心從塊裝置上讀取相應的資料塊,並將其在buffer cache中快取起來,以備下次訪問之用。
類似地,但物理檔案系統需要向塊裝置上寫資料時,也是先將資料寫到相應的緩衝區中,並將這個緩衝區標記為髒(dirty),然後在將來的某些時候將buffer cache中的資料真正地回寫到塊裝置上,或者將該緩衝區直接丟棄。從而實現減少磁碟寫操作的頻率。
redo buffer,又叫Redo Log Buffer,是SGA中一段儲存資料庫修改資訊的快取。這些資訊被儲存在重做條目(Redo Entry)中,重做條目中包含了由於INSERT、UPDATE、DELETE、CREATE、ALTER或DROP所做的修改操作而需要對資料庫重新組織或重做的必須資訊。在必要時,重做條目可用於資料庫恢復。重做條目是Oracle資料庫程式從使用者記憶體中複製到Redo Log Buffer中去的。重做條目在記憶體中是連續相連的。後臺程式LGWR負責將Redo Log Buffer中的資訊寫入到磁碟上活動的重做日誌檔案(Redo Log File)或檔案組中去的。引數LOG_BUFFER決定了Redo Log Buffer的大小。

接下
來,我們在對比一下buffer和cache的概念。
快取(cache)是把讀取過的資料儲存起來,重新讀取時若命中(找到需要的資料)就不要去讀硬碟了,若沒有命中就讀硬碟。其中的資料會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀的內容不斷往後排,直至從中刪除。 
緩衝(buffers)是根據磁碟的讀寫設計的,把分散的寫操作集中進行,減少磁碟碎片和硬碟的反覆尋道,從而提高系統效能。linux有一個守護程式定期清空緩衝內容(即寫如磁碟),也可以透過sync命令手動清空緩衝。 
兩者都是RAM中的資料。簡單來說,buffer是即將要被寫入磁碟的,而cache是被從磁碟中讀出來的

從以上兩組概念對比,我們就不難理解buffer cache和buffer的區別了。


~~~~~~~ the end~~~~~~~~~
hoegh
2016.02.29

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

相關文章