(轉)使用Oracle 11GR2 資料庫Flash Cache

dawn009發表於2015-04-04

使用Oracle 11GR2 資料庫Flash Cache
Oracle最近釋出了一個補丁程式,使得你可以在Oracle Enterprise Linux中使用資料庫Flash Cache,即使你並沒有使用Exadata儲存.這個補丁的名字有點隱晦:

  • 8974084:META. BUG FOR FLASH CACHE 11.2PL BUGS TO BACKPORT TO 11.2.0.1 OEL

只要安裝好這個補丁,你就可以使用任何已存在的flash 裝置作為資料庫的Flash Cache.下面是我在一個非常舊的伺服器與一個非常便宜的usb flash裝置上做的初步嘗試.相對於更優質的硬體來講, 測試結果並不具有代表性,但是我認為,它仍然是很有趣的.

安裝與配置

如果你也像我一樣想在一個USB flash裝置上做試驗,那麼也必須先掛載這個裝置.在我的機器上,我建立了一個目錄”/mnt/usbflash”,接著在/etc/fstab檔案新增了一個如下的條目:
/dev/sda1 /mnt/usbflash vfat noauto,users,rw,umask=0 0 0
在你的系統中,你可能需要將”/dev/sda1″改成其他的裝置,這依賴於你如何配置磁碟.然後就可以透過輸入”mount /dev/sda1″來掛載這個快閃記憶體盤(flash drive).
一旦掛載完畢,就可以透過設定系統引數db_flash_cache_files與db_flash_cache_size來配置flash cache了. 如下是我的相關設定:
Parameters About FlashCache
注意, 引數DB_FLASH_CACHE_FILE的值必須是一個儲存在快閃記憶體盤上的檔案,而不是這個快閃記憶體盤的掛載點本身.
一旦這些引數設定完畢,flash cache就會被啟用,並且將充當buffer cache的二級快取. 當從主快取移出一個block的時候,它將被移到flash cache中,從而在再次讀回這個block的時候不需要產生一次訪問磁碟的物理讀.

監控

有多種方法來檢查是否使用到了flash cache. 首先,v$sysstat檢視包含多個新的統計項來展示有多少資料塊被新增到flash cache中,以及在flash cache中命中的次數(從這兒下載指令碼):
Flash Cache Statistics
還有一些新的等待事件來顯示往flash cache中新增條目以及從flash cache中讀取條目引起的等待. 從下圖可以看到,’db flash’等待的次數超過’ db file sequential read’的等待次數,雖然從flash cache讀取的速度遠遠快於從磁碟的讀取速度(但是從flash cache讀取的次數也遠遠超過從磁碟讀取的次數):
Wait Event
那麼,請記住,我不能不為這個測試選擇了最糟糕的硬體-一個老舊的倆CPU intel主機以及一個便宜的拇指磁碟.即使這樣,還是發現了引人注目的問題-相對於整個處理時間來講寫開銷非常嚴重.雖然相對於db file sequential reads來講從flash cache中讀取的速度可以節約很多時間,維護flash cache的開銷也可能會非常高,因為大部分基於快閃記憶體的SSD(Solid State Disk)都有相對嚴重的寫瓶頸.
所有基於快閃記憶體的固態盤(SSD,Solid State Disk)都有寫效能方面的問題.然而,便宜的MLC(Multi Level Cell)快閃記憶體的寫速度差不多相當於更加昂貴的SLC(Single Level Cell)的1/3.在快閃記憶體盤比較新時,空閒空間可以以單頁(一般為4k)遞增的方式來寫.然而,當快閃記憶體盤越來越舊時,寫操作需要先清除一個完整的128頁的塊,從而就會慢很多了.我的便宜的USB盤是一箇舊盤,並且是MLC的,所以它的寫效能是非常差的.但是,即使是最好的基於快閃記憶體的SSD,它的寫速度也比讀速度要慢很多,因此,有些時候使用快閃記憶體盤反而會導致資料庫執行的更慢. 因此監控就顯得非常重要了.
下面是幾個與此相關的其他v$systat統計項:
Flash Statistics2

可以透過檢視V$BH檢視來檢視cache中的內容. 儲存在flash cache中的buffer有諸如’flashcur’一類的狀態,使得我們可以統計每個物件有多少buffer在主快取中,有多少buffer在flash cache中(指令碼來自這裡):
Cache Contents
在這個例子中,TXN_DATA表有85,833個塊在flash cache中,有28,753個塊在主buffer cache中.

結論

能讓flash cache工作,我非常高興,特別是在如此蹩腳的硬體上. 很高興Oracle對Non-Exadata硬體開放這項技術.
我將很快在搭建一套更好的環境,從而我可以理解它在相當好的商業SSD快閃記憶體盤上是如何工作的.
我堅信, 市場需要的理想的儲存體系應該包含至少兩層—一層來解決海量儲存,另一層解決快速檢索. 但是,我們也應該保持謹慎,因為flash的寫弊端可能導致我們在RAID5上遇到的類似的效能問題.

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

相關文章