資源供給:IO子系統之五
認識硬碟的特性,是資料庫系統優化的基礎所在,也是系統設計優化的基礎所在。
硬碟的基本屬性:
磁頭
碟片
磁軌
扇區
柱面
容量
尺寸
轉速
外磁軌
內磁軌
快取
介面
平均尋道時間
平均延遲時間
資料讀取時間
內部傳輸速度
外部傳輸速度
資料傳輸時間
幾個基本點:
資料的密度決定讀取的速度
外磁軌的讀取速度要遠遠大於內磁軌
單碟容量越大,速度越快
相同的單碟容量,尺寸越小速度越快
轉速越快,旋轉延遲越短
平均尋道時間和旋轉延遲為讀取資料的最主要時間消耗
在現在普遍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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資源供給:IO子系統之七
- 資源供給:IO子系統之一
- 資源供給:IO子系統之二
- 資源供給:IO子系統之三
- Linux 效能優化之 IO 子系統Linux優化
- MySQL 引擎特性:InnoDB IO 子系統MySql
- 給源系統分配一個源系統ID
- Linux優化之IO子系統監控與調優Linux優化
- 貨源供應鏈管理系統案例
- 資源供給:併發性控制和mutex之一Mutex
- 資源供給:併發性控制和mutex之二Mutex
- 資源供給:併發性控制和mutex之三Mutex
- 電子元器件供應鏈管理系統:降低管理成本,提升供應鏈系統效率
- 資源供給:記憶體和虛擬記憶體記憶體
- 五種傳統IO模型模型
- linux系統程式設計之檔案與IO(五):stat()系統呼叫獲取檔案資訊Linux程式設計
- JVM學習(五) -執行子系統JVM
- Linux驅動之GPIO子系統和pinctrl子系統Linux
- 資源供給:再談記憶體和虛擬記憶體記憶體
- 常用系統io
- Linux系統程式設計(2)——檔案與IO之系統呼叫與檔案IO操作Linux程式設計
- 企業供應商採購系統,實現電子採購管理系統平臺資料、資訊共享
- Qt 資源系統QT
- Linux系統程式設計之檔案IOLinux程式設計
- SAP MM 系統確定供應源優先順序
- Java的IO系統Java
- 標準io和系統io的辨析
- JVM之類載入器子系統JVM
- 共享資源庫系統
- 電商供應鏈管理系統貨源對接開發流程
- .NET 8.0 開源線上考試系統(支援移動端)io
- 容器編排系統k8s之Service資源K8S
- 容器編排系統K8s之crd資源K8S
- 容器編排系統K8s之APIService資源K8SAPI
- 容器編排系統K8s之HPA資源K8S
- [作業系統]阻塞io 非阻塞io Epoll作業系統
- 初探pinctrl子系統和GPIO子系統
- Linux系統磁碟IOLinux