資源供給:IO子系統之七

sunsapollos發表於2013-11-25

      隨機IO:以資料庫而言,以單個block size釋出的IO為隨機IO,比如db_block_size為4k,8k等
      順序IO:以資料庫而言,以大於單個block size釋出的IO都為順序IO

      磁碟系統:對於磁碟系統來說,並沒有隨機IO和順序IO的說法。一般來說,我們這樣定義磁碟系統的隨機IO:本次IO和上次IO的起始扇區和磁軌相差比較大,也就是說需要通過旋轉和徑向運動來完成的IO表述為隨機IO。而對於不需要通過旋轉和徑向運動來完成的前後兩次IO表示為順序IO。

     也就是說隨機或者順序IO是應用層的概念,而不是硬體層的概念。

    Buffer IO:進行檔案系統快取的IO操作
    Direct IO:bypass檔案系統快取的操作
    同步IO:在IO釋出之後等待IO返回結果的操作
    AIO:     在IO釋出之後繼續下一步處理的IO操作
    CIO:     解除了在IO之上的鎖定操作,可以支援同步釋出IO的操作

   非同步IO並不會提高IO的響應速度,單個IO的響應速度應該比較同步IO慢,但是增加了系統的併發性,並且非同步IO有可能實現IO合併會進一步提高吞吐量。  
   非同步IO對於磁碟系統提供了更高的IO壓力,在IO能力有限的系統可能會帶來負面的作用。

   CIO是通過解除檔案系統鎖定或者lv鎖定來完成併發性的提高的。

   Lun:   儲存系統提供給主機的邏輯磁碟
  lvm: 對於Lun進行進一步的管理以方便使用,以LV的形式提供給使用者使用,利用LV可以方便的對於LUN進行訪問
   檔案系統:檔案系統一般以page 4k為單元進行組織
   塊裝置:   一般以4k為單元進行組織
  字元裝置: 需要進行扇區對齊,必須是扇區的整數倍
 
  條帶化的目的:
   (1)、增加並行處理能力,每張磁碟只能同時支援一個IO,為了並行必須提供更多的磁碟,條帶化使資料均勻的分佈在不同的磁碟中增加併發能力。
   (2)、提供吞吐量,每張磁碟的吞吐量是有限的,為了某個目的的吞吐量,必須多張磁碟合併提供。

  條頻寬度: 有多少磁碟參與條帶化
  條帶大小: strip size,每個磁碟上分配的大小

SAME,Oracle推薦的標準配置。Stripe and mirror everywhere。ASM遵循SAME配置。

比如我們假設要訪問一張10GB的表格,希望其再1分鐘內返回(不考慮其他成本),那麼需要提供每秒170M的吞吐量。一般來說,目前的磁碟系統內部資料傳輸可以達到100M/s的速度,顯然無法滿足吞吐量的需求。顯然兩張磁碟就可以滿足需求。我們需要提供條帶化來使其提供並行能力。

這裡我們來看,一般對於lvm有max_io_size限制,對於磁碟系統一般也具有max_io_size,大部分系統在1M,2M或者4M。我們假設為1M。也就是我們系統釋出過來的1M的一次IO需要在兩塊磁碟上得到滿足,每個磁碟提供512K的能力。

好的,現在就是條頻寬度:=2,條帶深度(大小):=512K

當我們需要100GB的資料在1分鐘之內返回的時候顯然需要跟多的磁碟支援,比如16張。同樣是1M的IO,需要的條帶大小就是64K。

事實上可以看到如果我們需要高頻寬的操作,4M的max_io_size將遠遠超過1M的max_io_size。


在實踐中需要注意,無論是卷管理器還是儲存系統都有其擅長條頻寬度和條帶大小,最好落在該範圍之內。


raid 1
raid 1+0
raid 5
一般來說,raid 1,raid 1+0和raid 5為目前流行的配置。對於Netapp的儲存可能會配置在raid 6,EMC的儲存可能會提供Raid S。

我一直以為ASM提供基於條帶話的並行能力,但依據呂海波先生的測試,ASM不提供條帶化並行驅動能力。比如ASM預設的AU size := 1M,stripe width:=8 stripe size:= 128k
Oracle對於單個的1M IO將採取序列讀取方式,也就是依次讀取128K,讀取8次才結束。呂海波的這個測試結果非常意外,這個測試結果意味著ASM無法高頻寬的吞吐量,在資料倉儲類olap類應用中可能會存在問題,也就是說需要在硬體層次上通過Raid 0來提供條帶化並行驅動能力。

基於這個特性,預設ASM設定可能會對於olap和資料倉儲類應用帶來問題。更好的方式為:無論是否在硬體層次提供條帶化,對於資料倉儲類應用提供更高的AU size,比如4M,8M等。 

一直以為卷管理器的Raid 0提供並行處理能力,ASM的測試讓我對於vxvm,lvm等raid 0設定是否可以條帶並行化產生動搖,需要通過具體測試才可以確定。

按照某個觀點,塊裝置無論是寫的資料大小多大,比如256K,也是按照4K大小順序傳送到介面佇列中,如果基於這個觀點,也許真的所有的卷管理器都無法提供條帶化的並行能力,條帶化僅僅使提供更高的iops。
 
磁碟陣列的cache:
      磁碟陣列的cache對於儲存系統是非常重要的,尤其是Raid 5配置的系統,缺乏cache的支援將導致隨機寫IO不可忍受的緩慢。
      cache失效是磁碟系統無法承受壓力的一個基本表現,cache失效的意思就是儲存系統的cache處理無法跟上業務系統的IO壓力,導致需要的讀資料總是無法在cache中找到,寫資料總是無法發現空閒的空間。大家可以發現在cache失效的前提下,有cache的表現會比較沒有cache的表現還要差。
     儲存系統的cache作為二級cache,一般來說要達到一級cache(Oracle SGA)的命中率一般不太可能,但一般來說也希望可以達到50%以上的命中率,最好可以達到70%以上。

磁碟陣列cache的問題:
    業務是可以快速增長的,但磁碟系統的cache是有限的,cache很有可能無法支撐高峰期的IO壓力。
    我們在高吞吐量壓力系統幾乎總是建議採用Raid 1+0,避免Raid 5系統,配置足夠多的磁碟來提供真實IO頻寬。

磁碟陣列cache失效的簡單判斷:
   如果io的響應速度達到了磁碟的一般速度,比如10ms左右,一般認為cache已經完全失效了。對於cache良好的儲存系統,一般需要1ms一下,也許3ms是cache問題的一個分界線。
    
   

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

相關文章