資源供給:IO子系統之五

sunsapollos發表於2013-11-19
    
      認識硬碟的特性,是資料庫系統優化的基礎所在,也是系統設計優化的基礎所在。
    
      硬碟的基本屬性:    
     磁頭
     碟片
     磁軌
     扇區
     柱面
       
     容量
     尺寸
     轉速
     外磁軌
     內磁軌
     快取       
     介面

     平均尋道時間
     平均延遲時間
     資料讀取時間
     內部傳輸速度
     外部傳輸速度
     資料傳輸時間

  幾個基本點:
    資料的密度決定讀取的速度
    外磁軌的讀取速度要遠遠大於內磁軌
   單碟容量越大,速度越快
   相同的單碟容量,尺寸越小速度越快
    轉速越快,旋轉延遲越短
   平均尋道時間和旋轉延遲為讀取資料的最主要時間消耗
    在現在普遍FC和SAS的年代,資料讀取速度取決於資料內部傳輸速度。
   
  
  幾個基本資料:
   15000rpm的磁碟:
      平均旋轉延遲:=60*1000/15000/2 = 2ms
       平均尋道時間:=     3~10ms
       內部資料傳輸速度:=100m/s
       外部傳輸速度:FC:=200|400m/s  SAS: 300m|600m/s
                               SATAII: 150m  SATAIII: 300m
   
  外磁軌和內磁軌
       我們簡單的以面積置換的方式來確定外磁軌區域和內磁軌區域的資料儲存量:
     
       外區/內區:=3:1,也就是以中間劃分的資料儲存,外磁軌佔總資料的75%,內磁軌佔總資料的25%,顯然資料讀取速度外磁軌為內磁軌3倍。
     
       顯然外磁軌的平均尋道時間也比作用於全盤的大大加快:在徑向運動速度一樣的前提下,其平均移動距離降低了50%,也就是說降低了一半的平均尋道時間。
     
磁軌使用建議:
     無論如何,在任何系統中,包含OLTP和DW系統中,僅僅使用外磁軌是一個最為簡單的增加效能,同時不增加成本的手段。內磁軌的磁碟可以用來存放資料庫外的速度或者一些存檔資料。


磁碟對於oltp系統的影響:
     oltp系統的典型特點為資料隨機訪問,也就是其磁頭位置是隨機的,需要經過尋道時間,我們假設讀取8k的資料來計算時間。
     讀取8k的資料:
     平均尋道時間:6ms
     平均延遲時間:2ms
      8k資料讀取:=1000*8/1024/100=0.078ms
   
     可以看到可以忽略資料讀取時間,僅僅取平均尋道和平均延遲即可,也就是說讀取8k的一個IO:=6ms + 2ms = 8ms

     同樣的讀取,我們來看僅僅作用於外磁軌:
     讀取8k的資料:
     平均尋道時間:3ms
     平均延遲時間:2ms
     8k資料讀取時間:= 1000*8/1024/(100*1.5) = 0.052ms
     這樣我們取:5ms
    
     相對於我們僅僅作用於外磁軌的oltp效率提高:(8-5)/8:= 37.5%,也就是說我們不要增加一分錢的投資可以使oltp系統的磁碟效能提高37.5%。僅僅放置oltp資料在外磁軌是我們極力推薦的方式。


    我們進一步來看順序讀:
    讀取1m的資料:

    平均尋道時間:0ms
    平均延遲時間:0ms
    1m的資料讀取時間:= 1000*1/100 = 10ms
    
    也就是說讀取1M的資料在理想狀態下是10ms,大家在這裡可以發現讀取1M的資料和讀取8k的資料兩者的時間差異非常小。

    如果作用於外磁軌:
   1m的資料讀取時間:= 1000*1/(100*1.5) = 6.67ms

   外磁軌處理的效能增強:(10-6.67)/10 = 33.3%,也就是可以不花一分錢得到DW系統的磁碟33.3%的效能增強。

   當然這個批處理計算極為理想的,單執行緒工作,磁碟被獨佔。在實際的系統中可能會存在併發而導致存在平均延遲時間。

    從上面的描述中可以看出,對於順序IO的業務保持其磁碟系統獨佔式執行不受干擾是多少的重要。

    具體到Oracle來說,特別是Online Redo Log,必須設定獨立的磁碟給Online RedoLog,可惜我們在實踐過程中很少遵循這個原則。
    我們來看看,在獨佔式的Online redo log中,即使沒有磁碟快取的支援,也可以獲得很好的Io響應:

    假設寫2k的資料,2k是大多數業務系統的事務範疇。

    平均尋道時間:=0ms
    平均延遲時間:=0ms
    資料讀取時間:=1000*2/1024/100 = 0.019ms
   如果僅僅作用於外磁軌,效率可以進一步的提高。
   可以看到,即使是僅僅一張磁碟的Online Redo Log,也可以提供每秒:50000多的事務吞吐量。

    一旦發生混合訪問,redo log寫的效能將快速下跌:
    平均尋道時間:=6ms
    平均旋轉延遲:=2ms
    資料讀取時間:=0.019ms
    合計:=8.019ms
   一旦合計之後,每秒的事務吞吐量將很可憐,只能提供每秒:120個事務的吞吐量。  

  當然在實際業務過程不會存在如此大的差異,主要原因在於磁碟本身存在著buffer,磁碟陣列更是有大型的cache做支撐。 


   同樣的情況也可以解釋為什麼並行的IO處理往往是序列處理的效率更高,序列的獨佔式處理避免了平均尋道時間和平均旋轉延遲。
   



 

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

相關文章