ORACLE資料檔案儲存之我見

junsansi發表於2008-09-17

即使是現在,不少oracle的資料或教材上還明明白白的寫著諸如:為提高磁碟效能,為保護資料檔案,為......不要將Data file,Online Redo,Control file等等放到同一個碟符下這類描述。其初衷是好的,由於過去多是直接訪問單個獨立硬碟,將資料檔案,日誌檔案等指向不同碟符,可以在一定程式上達到平衡IO的目的,但在儲存技術/容量飛速發展的今天,還用這樣的形容會讓一些剛接觸oracle的朋友感到困惑。

就當前我們所處的環境,不要說大型伺服器都有獨立儲存,甚至是普通的家用PC都開始應用越來越普及的RAID技術來實現增速擴容的目的,由於raid具有自動平衡IO的能力,並且其對前臺操作者是完全透明的,在這種情況下,實際上分不分碟符對效率已經沒有太大影響(RAID自己就給均衡了,就算你再手工指向不同碟符或路徑,但具體資料會儲存在哪塊磁碟上,也不是你能夠決定的了)。

但是,並非說採用RAID就萬事大吉,提到這裡,我們有必要再來回顧一下RAID的相關技術,我們都知道,不同RAID級別實現的方式都是不同的,最常見的有:

RAID 0:其原理是將資料分散到多個磁碟上存取,專業術語形容叫條帶(striping),由於其寫入是同時向多塊磁碟的並行操作,因此其寫效能是最高的,不過,缺點也很明顯,由於RAID 0不具備冗餘的特性,因此一旦組成RAID 0的磁碟陣中有任意一塊磁碟損壞,則所有資料都可能丟失。

RAID 1:專業術語形容叫映象(mirroring),原理是一份資料同時寫向兩塊硬碟(這兩塊磁碟被稱為一個磁碟對,反映到前臺應用則是一塊盤),即使損壞一塊磁碟也沒有關係,因此安全性很高。缺點也同樣明顯,RAID 1空間利用率低,有效空間只有總儲存容量的一半,而且寫效能也並無提升。不過正是由於映象的原因,RAID 1的讀效能表現非常出眾,如果原始資料比較繁忙時,甚至映象盤也能夠提供讀服務。

RAID 5:曾經流行過,曾幾何時不再流行,而今又開始流行。在磁碟昂貴的年代RAID 5是一種很好的解決方式,相對低廉的組建成本下提供了不錯的讀寫效能,冗餘保護功能而且還沒有像RAID 1那樣誇張的空間浪費。其實現原理也是資料分散儲存,以資料的校驗位來確保資料安全,但不指定校驗用的奇偶盤,而是將校驗位互動儲存於各個磁碟,在寫入時通過奇偶校驗來確定應該向何處寫。正所謂成也蕭何敗也蕭何啊,正是由於奇偶校驗值它不需要犧牲一半的儲存空間來提供冗餘保護,也正是由於奇偶校驗值它不得不在讀寫操作或者磁碟恢復時進行大量計算,為了實現冗餘保護,每一次寫操作,將產生四個實際的讀/寫操作, 其中兩次讀舊的資料及奇偶資訊, 兩次寫新的資料及奇偶資訊,這種寫迭代對寫效能的影響是具大的(注:曾經!!!目前而言,大型儲存對於RAID5有專門優化,比如大量cache的應用能夠將校驗在之前就完成,最終寫入速度還是非常理想的,不過,對於使用RAID卡或主析上整合RAID晶片的朋友,黑黑,還是需要考慮迭代寫的影響)。

RAID 0+1(或者RAID 1+0,也被稱為RAID 10):關於這兩個,大家如果已經熟知了RAID 0和RAID 1,那從最簡單的字面意義來理解RAID 0+1(RAID 1+0)就o了。0+1和1+0之間的區別無非是先條帶再映象,或是先映象再條帶,從應用的角度沒有區別,但從管理維護的角度還是有影響的,具體有哪些影響,我們還是要從RAID 0和RAID 1的特性開說,RAID 0我們都知道,損壞一塊盤則整個RAID崩潰,而對於RAID 1所有資料都有完整冗餘。

舉個例子,如果說我們有a,b,c,d四塊盤做RAID 0+1,a+b組織一個RAID 0,c+d組成一個RAID 0,然後兩個RAID 0再做成一個RAID 1,如果a,b,c,d中任意一塊盤損壞,比如b,則a+b組成的RAID 0就失效了,這時候如果c,d中再有任意一塊盤損壞,整個RAID 0+1都會失效。

如果a,b,c,d四塊盤做成RAID 10,a+b組成一個RAID 1,c+d組成一個RAID 1,然後兩個RAID 1再做成RAID 0,如果四塊盤任意一塊損壞,比如又是b,則a+b組成的RAID 1失效,這個時候如果a,c,d中再有任意一塊盤損壞,只要不是a,整個RAID 10依賴可用,因此相對來說,RAID 10的容錯效能更好一些。

由上可知,既使應用了RAID陳列,並非就萬事大吉,最重要的是根據其不同特性來應用,比如說,對於Standby系統,我們知道,它通常都處於少讀而多寫的狀態,這種情況下,採用raid5就是不恰當的,因為RAID 5有迭代的寫損失。同理對於Online Redo檔案實際也是這樣,Online Redo多數情況下都處於頻繁寫而少讀的狀態,對於這些檔案,我們甚至可以更極端一些,連儲存都不用,直接扔到裸裝置上去(不要做映象,因為Online Redo自身就是有冗餘的),比如通常每組Online Redo會有二份冗餘,假如你的資料為總共設定了5組,那麼你只需要建立10個裸裝置,並將Online Redo檔案分別指定到這些裸裝置上,我認為這樣Online Redo的寫效率將會是最高的。當然,如果每組Online Redo只有一個檔案,你決定將Online Redo都儲存到RAID 1盤陣,我認為也相當可行。

近幾年來,磁碟價格G/元跌幅堪比A股市場,因此RAID 0+1/10這種曾經認為成本極高昂的搭建方式也越來越普及,可以說真正接近了安全性,高效能,低成本的終極目標。我覺著,如果你實在抽不出時間為不同檔案指定不同儲存方式,那麼將所有檔案都扔到RAID 10陣列上,也是個不錯的選擇。

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

相關文章