(轉)資料庫Flash Cache(II)
資料庫Flash Cache(II)
我非常期待我的高效能Flash SSD(一個Intel X-25E),但同時,我已經在一套便宜的硬體裝置上(我的中對此做了說明)做了很多資料庫Flash Cache的測試. 有時,在較差的硬體上測試新特性也非常有用,因為你可以觀察到一些在高速執行的環境下不會發生的現象.
最初,我天真地認為資料塊會被Oracle的服務程式複製到Flash Cache中.比如,當我從磁碟讀取的時候,同時將資料塊放到Buffer Cache與Flash Cache中.然而,透過觀察,實際情形可能是, 當資料塊將要被刷出Buffer Cache的時候, 由DBWR程式將此資料塊從Buffer Cache移入到Flash Cache中.
當然,這是一種更好的處理方式.DBWR可以非同步的將資料塊寫入Flash Cache中,從而使用者會話可以獲得好處,在資料塊寫入Flash Cache中的時候不需要進行等待(比從磁碟讀取耗費更少的時間).
因此,一個資料塊可能有一個如下圖的生命週期:
- Oracle服務程式從磁碟讀取檔案的一個資料塊,並將其放到Buffer Cache中
- 如果一個會話在稍後需要訪問這個資料塊,並且這個資料塊仍然在Buffer Cache中,就可以直接從Buffer Cache中讀取這個資料塊
- 在這個資料塊離開Buffer Cache之前,DBWR將它寫入Flash Cache(如果DBWR不是太忙的話)
- 如果一個會話稍後需要訪問這個資料塊,並且它還在Flash Cache中的話,就可以從Flash Cache中讀取這個資料塊(有可能會將這個資料塊放回到Buffer Cache中)
- 如果這個資料塊被修改了,DBWR程式最終會將這個資料塊寫回磁碟.(問題:Flash Cache中那些沒有被修改過的資料塊會發生什麼呢?)
DBWR 與 Flash Cache
從快閃記憶體上讀取的速度是非常快的,但是往快閃記憶體上寫就要慢很多了.因此,為了避免效能問題,DBWR程式應該:
- 1. 不要去寫快閃記憶體, 除非不得不寫,並且
- 2. 如果有其他更重要的活動的話,一點都不要寫快閃記憶體.
對於第一點,在資料塊將要被刷出Buffer Cache之前,DBWR程式不要填充Flash Cache.也就是說,DBWR不會為了防止資料塊將要被刷出Buffer Cache去寫這個資料塊,而只是這個資料塊確實(或許是可能性很高的時候)將要被刷出Buffer Cache的時候才會將其寫入Flash Cache.在資料塊被寫入Buffer Cache的時候,我們沒有發現對Flash Cache的寫操作, 同時有其他資料塊被刷出Buffer Cache的情況除外.
第二點,當DBWR忙於將髒塊寫入到磁碟的時候,不會去寫Flash Cache,也不會推遲將要被刷出Buffer Cache的資料塊的刷出時間.DBWR程式必須儘可能塊地清除Buffer Cache中的髒塊,否則”free buffer waits”等待事件就會阻止新的資料塊被讀入Buffer Cache中.如果資料塊將要被刷出Buffer Cache,而同時DBWR程式又很忙,這些資料塊將不會被寫入Flash Cache,統計資訊項’flash cache insert skip: DBWR overloaded’將出現增長.
度量DB Flash Cache的效率
下面的報告了DBWR由於太忙或其他原因而跳過寫Flash Cache的次數:
- 我認為我理解”DBWR overloaded”統計項的意思,DBWR忙於寫髒塊到磁碟而沒有足夠的處理能力來將乾淨的資料塊寫入Flash Cache.
- “flash cache insert skip: exists”統計項也比較容易理解.如果我們從Flash Cache將一個資料塊讀回Buffer Cache,它還會繼續保留在Flash Cache中.當它再次在Buffer Cache中被刷出的時候就不再需要寫入Flash Cache了.
- “not current”統計項可能表示,DBWR明白磁碟或者Buffer Cache中還有這個資料塊的一個更新的複製,因此拒絕寫一個版本到Flash Cache上.
- “not useful”統計項,我無法理解…
我認為這裡最大的啟示是:
在一個DBWR非常繁忙的系統上,DB Flash Cache可能會非常無效率.
要測量出使用Flash Cache帶來的好處,我們可以計算由於使用Flash Cache而被避免掉的物理讀的次數,以及乘上每種讀操作耗費的平均時間.下面嘗試做這個對比,雖然僅僅針對單塊讀操作:
結論
DB Flash Cache的架構使得我們可以對與快閃記憶體SSD相關的相對糟糕的寫效能可以顯得稍微放鬆一點.如果我們將資料檔案放到快閃記憶體SSD上,我們可能會有遭遇”free buffer waits”瓶頸的風險: DBWR可能會由於嘗試往低速(從寫延遲的角度上看的話)的快閃記憶體盤上寫資料塊而中止,相對於磁碟來講,我們可能實際上遭遇了更糟糕的效能,至少對於有非常高的寫頻率的應用來講.相應地,幾乎不應該出現實際的負面因素,可能出現的更糟糕的情況是,DBWR太忙,以致於不會去填充Flash Cache,而使得Flash Cache變得更加無效.
DB Flash Cache的效率依賴於以下兩個主要因素:
- 1. DBWR是否有足夠的空間事件來寫Flash Cache?
- 2. DBWR需要花費多長事件類寫快閃記憶體裝置?
第一個問題的答案依賴於DBWR當前的活動效率,可能也相應地依賴於你當期的磁碟陣列有多少可用的寫頻寬.但是,如果你的資料庫已經遭遇或者將要遭遇”free buffer waits”,那麼DB Flash Cache可能無法正常發揮作用,因為DBWR可能永遠不會寫Flash Cache.
第二個問題的答案依賴於快閃記憶體SSD的品質.通常你會選擇使用擁有最小寫延遲的快閃記憶體盤.那通常也意味著支援TRIM API呼叫,並且是使用SLC(Single Level Cell)的快閃記憶體.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-682272/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- (轉)使用Oracle 11GR2 資料庫Flash CacheOracle資料庫
- (轉)快閃記憶體表空間 VS 資料庫Flash Cache記憶體資料庫
- cache資料庫入門教程資料庫
- flash資料
- FLASH CACHE IN ORACLE 11GOracle
- Exadata Flash Cache 簡介(二)
- Part II 診斷和優化資料庫效能優化資料庫
- OCP課程61:管理II之複製資料庫資料庫
- OCP課程50:管理II之診斷資料庫資料庫
- OCP課程53:管理II之使用閃回資料庫資料庫
- low cache rba,on disk rba資料庫恢復過程資料庫
- FLASH倉庫
- 資料庫轉換工具,不同資料庫之前任意轉換資料庫
- How To Size the Database Smart Flash Cache (Doc ID 1317950.1)Database
- Oracle資料庫資料物件分析(轉)Oracle資料庫物件
- 客戶資料庫出現大量cache buffer chains latch資料庫AI
- 使用 Flash Table 回滾資料
- 資料庫索引原理-轉資料庫索引
- ABAP資料庫操作(轉)資料庫
- 玩轉資料庫索引資料庫索引
- [轉]Mysql資料庫相關資料索引MySql資料庫索引
- PHP Oracle 資料庫函式庫(轉)PHPOracle資料庫函式
- 【轉】Oracle資料庫優化之資料庫磁碟I/OOracle資料庫優化
- 【轉載】關聯式資料庫還是NoSQL資料庫資料庫SQL
- 常見資料庫系統之比較 - Oracle資料庫(轉)資料庫Oracle
- 資料庫學習:在資料庫中存取檔案(轉)資料庫
- 單例項資料庫工具轉化多例項資料庫單例資料庫
- 單例項資料庫手工轉化多例項資料庫單例資料庫
- NIOS II 9.1 SP1 FLASH Programmer 操作詳解iOS
- 【轉】Qt資料庫總結QT資料庫
- 轉載oracle資料庫鎖Oracle資料庫
- 資料庫健康檢查(轉)資料庫
- 資料庫營銷(轉載)資料庫
- Oracle資料庫碎片整理(轉)Oracle資料庫
- oracle資料庫巡檢(轉)Oracle資料庫
- 【轉】RMAN建立duplicate資料庫資料庫
- 資料庫結構操作 (轉)資料庫
- 為資料庫建立索引(轉)資料庫索引