八、IO最佳化(1)磁碟簇

來源:互聯網
上載者:User

一、硬碟結構

1. 硬碟基本結構

  硬碟最基本的組成部分是由堅硬金屬材料製成的塗以磁性介質的碟片。

  不同容量硬碟的碟片數不等。每個碟片有兩面,每個面都有一個磁頭Head),習慣用磁頭號來區分。碟片被分成許多扇形的地區,每個地區叫一個扇區Sector),每個扇區可儲存128×2的N次方N=0.1.2.3)位元組資訊。在DOS中每扇區是128×2^2=512位元組。碟片表面上以碟片中心為圓心,不同半徑的同心圓稱為磁軌Track)。硬碟中,不同碟片相同半徑的磁軌所組成的圓柱稱為柱面Cylinder)。

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/21232133U-0.png" title="磁碟結構.png" alt="144156300.png" />

  扇區、磁軌或柱面)和磁頭數構成了硬碟結構的基本參數,通過這些參數可以得到硬碟的容量,其計算公式為:儲存容量=磁頭數×磁軌柱面)數×每道扇區數×每扇區位元組數


2. 磁碟簇

 “簇”是DOS進行分配的最小單位。當建立一個很小的檔案時,如是一個位元組,則它在磁碟上並不是只佔一個位元組的空間,而是佔有整個一簇。DOS視不同的儲存介質如磁碟片,硬碟),不同容量的硬碟,簇的大小也不一樣。簇的大小可在稱為磁碟參數區塊BPB)中擷取。簇的概念僅適用於資料區。

  預設的情況下,在格式化的時候如果沒有指定磁碟簇的大小,那麼系統會根據分區的大小選擇預設的簇值。其實在NTFS檔案系統中格式化的時候,可以在“Format”命令後面添加“/a:UnitSize ”參數來指定磁碟簇的大小,UnitSize表示簇大小的值,NTFS支援512/1024/2048/4096/8192/16K/32K/64K。比如“format d:/fs:NTFS /a:2048”,表示將D盤用NTFS檔案系統格式化,磁碟簇的值為2048B。

  一般情況下,不需要去手工設定磁碟簇的大小,使用預設的設定就可以了。比如在用NTFS檔案系統格式化分區的時候,系統會根據分區的大小自動選擇預設的簇大小,比如4KB。

  在NTFS檔案系統中,簇的大小會影響到磁碟檔案的排列,設定適當的簇大小可以減少磁碟空間丟失和分區上片段的數量。如果磁碟簇設定過大,會影響到磁碟儲存效率;反之如果設定過小,雖然會提高利用效率,但是會產生大量磁碟片段。


3. 磁碟I/O瓶頸的由來

  影響磁碟讀取效能的兩個主要因素:尋道時間和輪詢延遲。我們在查詢資料時,有兩種磁碟的讀取方式:順序讀和隨機讀。隨機讀發生時,磁頭需要移動並定位到所在的Track和Sector,這個時間比較長。而一旦磁頭完成定位,讀取一個Sector和連續幾個Sector的耗時基本上沒有區別。

  SQL Server 讀取資料檔案時,通常要按記錄的邏輯順序讀取相應的記錄,如果邏輯上相鄰的資料頁在物理分布上不連續,則會因為磁頭的來回移動使效能大打折扣。


二、SQL Server中的磁碟儲存單位

1. 頁page)和區extend)

  SQL Server的資料的儲存基本單位是8KB的頁,即使你只需要讀取一條記錄,SQL Server還是會把記錄所在的整個頁讀取出來。

  在分配資料頁時,連續8個頁組成一個區extend)進行統一分配管理。


2. 預讀

  SQL Server企業版有一種預讀機制,在讀取一個頁面時,會順帶把相鄰的頁面也同時讀取到記憶體中,最大可預讀1MB的塊。如果下一步需要訪問的資料正好位於剛剛讀出的相鄰頁面,則將從預讀中大大受益。


3. 建議

  借鑒區的組織圖和預讀機制,我們可以將磁碟格式化為64KB的簇。當讀取一個8KB頁面時,實際的磁碟是讀取出了64K。但是因為簇是連續的扇區,因此多讀取的這一部分,對效能的影響基本是可以忽略的。

  因此我們可以將專用於SQL Server儲存的磁碟分割格式化成為64KB的簇,這樣在不浪費空間的前提下,又可以提高效能。



三、扇區對齊

1. 卷對齊Volume Alignment)

  如果一個NTFS卷建立在一個RAID裝置上,通常需要執行卷對齊。如果卷對齊失敗,可能導致明顯的效能下降。由於國內一般將卷稱為分區,因此俗稱“分區對齊”。

  早期的磁碟,是以512Bytes作為一個扇區。隨著硬碟容量攀升,這個標準不但繁瑣,而且降低效率,因此後續硬碟改為每個扇區為4096Bytes,俗稱“4K扇區”。有可能NTFS的扇區的寫入點正好位於兩個物理4KB的扇區之間,也就是說,即使NTFS寫入最小的量,也會用到2個物理扇區,顯然這樣對寫入和讀取都會造成很大影響。

  以為例,上方的區塊顯示LBA 0已經對齊了第一個物理4KB塊,這種情況稱為 Alignment 0;下方的區塊顯示 LBA0 對齊到物理4KB扇區的第2個512位元組塊,這種情況稱為 Alignment 1。

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/2123214R6-1.png" title="扇區對齊.png" alt="102707877.png" />

  由於LBA起點位置可以有8種可能性,因此一共可能7種扇區不對齊的情況,這些情況均會引起與Alignment 1 情況相似的“讀取-修改-寫入”事件。


2. 實現4K對齊

  對於 Windows 7 和 Windows Server 2008 作業系統,使用系統內建工具進行格式化,那麼其格式化後的分區預設就會是“4K對齊”的分區,使用者無需再做任何設定了。如果是依然在使用低版本的作業系統的話,那麼要做到“4K對齊”就需要一些工具。例如:《Disk performance may be slower than expected when you use multiple disks in Windows Server 2003, in Windows XP, and in Windows 2000》 http://support.microsoft.com/default.aspx?scid=kb;EN-US;929491



本文結語:

  根據SQL Server資料頁的組織特性,將磁碟分割格式化成為64KB的簇。


本文出自 “我們一起追過的MSSQL” 部落格,轉載請與作者聯絡!

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.