磁碟讀寫與資料庫的關係

來源:互聯網
上載者:User

標籤:int   cells   個數   ble   arm   reg   大小   電機   seek   

 

一 磁碟物理結構
(1) 碟片:硬碟的盤體由多個碟片疊在一起構成。

在硬碟出廠時,由硬碟生產商完成了低階格式化(物理格式化),作用是將空白的碟片(Platter)劃分為一個個同圓心、不同半徑的磁軌(Track),還將磁軌劃分為若干個扇區(Sector),每個扇區可儲存128×2的N次方(N=0.1.2.3)位元組資訊,預設每個扇區的大小為512位元組。通常使用者無需再進行低階格式化操作。

 

(2) 磁頭:每張碟片的正反兩面各有一個磁頭。

 

(3) 主軸:所有碟片都由主軸電機帶動旋轉。

 

(4) 控制整合電路板:複雜!上面還有ROM(內有軟體系統)、Cache等。

 

二 磁碟如何完成單次IO操作
(1) 尋道
當控制器對磁碟發出一個IO操作命令的時候,磁碟的驅動臂(Actuator Arm)帶動磁頭(Head)離開著陸區(Landing Zone,位於內圈沒有資料的地區),移動到要操作的初始資料區塊所在的磁軌(Track)的正上方,這個過程被稱為尋道(Seeking),對應消耗的時間被稱為尋道時間(Seek Time);

(2) 旋轉延遲
找到對應磁軌還不能馬上讀取資料,這時候磁頭要等到磁碟碟片(Platter)旋轉到初始資料區塊所在的扇區(Sector)落在讀寫磁頭正下方之後才能開始讀取資料,在這個等待碟片旋轉到可操作扇區的過程中消耗的時間稱為旋轉延時(Rotational Latency);

(3) 資料傳送
接下來就隨著碟片的旋轉,磁頭不斷的讀/寫相應的資料區塊,直到完成這次IO所需要操作的全部資料,這個過程稱為資料傳送(Data Transfer),對應的時間稱為傳送時間(Transfer Time)。完成這三個步驟之後單次IO操作也就完成了。

根據磁碟單次IO操作的過程,可以發現:
單次IO時間 = 尋道時間 + 旋轉延遲 + 傳送時間

進而推算IOPS(IO per second)的公式為:
IOPS = 1000ms/單次IO時間

三 磁碟IOPS計算
不同磁碟,它的尋道時間,旋轉延遲,資料傳送所需的時間各是多少?

1. 尋道時間
考慮到被讀寫的資料可能在磁碟的任意一個磁軌,既有可能在磁碟的最內圈(尋道時間最短),也可能在磁碟的最外圈(尋道時間最長),所以在計算中我們只考慮平均尋道時間。

在購買磁碟時,該參數都有標明,目前的SATA/SAS磁碟,按轉速不同,尋道時間不同,不過通常都在10ms以下:

轉速

平均尋道時間

15000rpm

2~3ms

10000rpm

3~5ms

7200rpm

8~9ms

2. 旋轉延時
和尋道一樣,當磁頭定位到磁軌之後有可能正好在要讀寫扇區之上,這時候是不需要額外的延時就可以立刻讀寫到資料,但是最壞的情況確實要磁碟旋轉整整一圈之後磁頭才能讀取到資料,所以這裡也考慮的是平均旋轉延時,對於15000rpm的磁碟就是(60s/15000)*(1/2) = 2ms。

3. 傳送時間
(1) 磁碟傳輸速率
磁碟傳輸速率分兩種:內部傳輸速率(Internal Transfer Rate),外部傳輸速率(External Transfer Rate)。

內部傳輸速率(Internal Transfer Rate),是指磁頭與硬碟緩衝之間的資料轉送速率,簡單的說就是硬碟磁頭將資料從碟片上讀取出來,然後儲存在緩衝內的速度。

理想的內部傳輸速率不存在尋道,旋轉延時,就一直在同一個磁軌上讀資料並傳到緩衝,顯然這是不可能的,因為單個磁軌的儲存空間是有限的;

實際的內部傳輸速率包含了尋道和旋轉延時,目前家用磁碟,穩定的內部傳輸速率一般在30MB/s到45MB/s之間(伺服器磁碟,應該會更高)。

外部傳輸速率(External Transfer Rate),是指硬碟緩衝和系統匯流排之間的資料轉送速率,也就是電腦通過硬碟介面從緩衝中將資料讀出交給相應的硬碟控制器的速率。

硬碟廠商在硬碟參數中,通常也會給出一個最大傳輸速率,比如現在SATA3.0的6Gbit/s,換算一下就是6*1024/8,768MB/s,通常指的是硬碟介面對外的最大傳輸速率,當然實際使用中是達不到這個值的。

這裡計算IOPS,保守選擇實際內部傳輸速率,以40M/s為例。

(2) 單次IO操作的大小
有了傳送速率,還要知道單次IO操作的大小(IO Chunk Size),才可以算出單次IO的傳送時間。那麼磁碟單次IO的大小是多少?答案是:不確定。

作業系統為了提高 IO的效能而引入了檔案系統快取(File System Cache),系統會根據請求資料的情況將多個來自IO的請求先放在緩衝裡面,然後再一次性的提交給磁碟,也就是說對於資料庫發出的多個8K資料區塊的讀操作有可能放在一個磁碟讀IO裡就處理了。

還有,有些儲存系統也是提供了緩衝(Cache),接收到作業系統的IO請求之後也是會將多個作業系統的 IO請求合并成一個來處理。

不管是作業系統層面的緩衝,還是磁碟控制卡層面的緩衝,目的都只有一個,提高資料讀寫的效率。因此每次單獨的IO操作大小都是不一樣的,它主要取決於系統對於資料讀寫效率的判斷。這裡以SQL Server資料庫的資料頁大小為例:8K。

(3) 傳送時間
傳送時間 = IO Chunk Size/Internal Transfer Rate = 8k/40M/s = 0.2ms

可以發現:
(3.1) 如果IO Chunk Size大的話,傳送時間會變長,單次IO時間就也變長,從而導致IOPS變小;
(3.2) 機械磁碟的主要讀寫成本,都花在了定址時間上,即:尋道時間 + 旋轉延遲,也就是磁碟臂的擺動,和磁碟的旋轉延遲。
(3.3) 如果粗略的計算IOPS,可以忽略傳送時間,1000ms/(尋道時間 + 旋轉延遲)即可。

4. IOPS計算樣本
以15000rpm為例:

(1) 單次IO時間
單次IO時間 = 尋道時間 + 旋轉延遲 + 傳送時間 = 3ms + 2ms + 0.2 ms = 5.2 ms

(2) IOPS
IOPS = 1000ms/單次IO時間 = 1000ms/5.2ms = 192 (次)
這裡計算的是單塊磁碟的隨機訪問IOPS。

考慮一種極端的情況,如果磁碟全部為順序訪問,那麼就可以忽略:尋道時間 + 旋轉延遲 的時間長度,IOPS的計算公式就變為:IOPS = 1000ms/傳送時間
IOPS = 1000ms/傳送時間= 1000ms/0.2ms = 5000 (次)

顯然這種極端的情況太過理想,畢竟每個磁軌的空間是有限的,尋道時間 + 旋轉延遲 時間長度確實可以減少,不過是無法完全避免的。

四 資料庫中的磁碟讀寫
1. 隨機訪問和連續訪問
(1) 隨機訪問(Random Access)
指的是本次IO所給出的扇區地址和上次IO給出扇區地址相差比較大,這樣的話磁頭在兩次IO操作之間需要作比較大的移動動作才能重新開始讀/寫資料。

(2) 連續訪問(Sequential Access)
相反的,如果當次IO給出的扇區地址與上次IO結束的扇區地址一致或者是接近的話,那磁頭就能很快的開始這次IO操作,這樣的多個IO操作稱為連續訪問。

(3) 以SQL Server資料庫為例
資料檔案,SQL Server統一區上的對象,是以extent(8*8k)為單位進行空間分配的,資料存放是很隨機的,哪個資料頁有空間,就寫在哪裡,除非通過檔案組給每個表預分配足夠大的、單獨使用的檔案,否則不能保證資料的連續性,通常為隨機訪問。
另外哪怕叢集索引表,也只是邏輯上的連續,並不是物理上。

記錄檔,由於有VLF的存在,日誌的讀寫理論上為連續訪問,但如果記錄檔設定為自動成長,且增量不大,VLF就會很多很小,那麼就也並不是嚴格的連續訪問了。

2. 順序IO和並發IO
(1) 順序IO模式(Queue Mode)
磁碟控制卡可能會一次對磁碟組發出一連串的IO命令,如果磁碟組一次只能執行一個IO命令,稱為順序IO;

(2) 並發IO模式(Burst Mode)
當磁碟組能同時執行多個IO命令時,稱為並發IO。並發IO只能發生在由多個磁碟組成的磁碟組上,單塊磁碟只能一次處理一個IO命令。

(3) 以SQL Server資料庫為例
有的時候,儘管磁碟的IOPS(Disk Transfers/sec)還沒有太大,但是探索資料庫出現IO等待,為什嗎?通常是因為有了磁碟請求隊列,有過多的IO請求堆積。

磁碟的請求隊列和繁忙程度,通過以下效能計數器查看:
LogicalDisk/Avg.Disk Queue Length
LogicalDisk/Current Disk Queue Length
LogicalDisk/%Disk Time

這種情況下,可以做的是:
(1) 簡化商務邏輯,減少IO請求數;
(2) 同一個執行個體下的多個使用者資料庫,遷移到不同執行個體下;
(3) 同一個資料庫的日誌、資料檔案,分離到不同的儲存單元;
(4) 藉助HA策略,做讀寫操作的分離。

3. IOPS和輸送量(throughput)
(1) IOPS
IOPS即每秒進行讀寫(I/O)操作的次數。在計算傳送時間時,有提到:如果IO Chunk Size大的話,那麼IOPS會變小,假設以100M為單位讀寫資料,那麼IOPS就會很小。

(2) 輸送量(throughput)
輸送量指每秒可以讀寫的位元組數。同樣假設以100M為單位讀寫資料,儘管IOPS很小,但是每秒讀寫了N*100M的資料,輸送量並不小。

(3) 以SQL Server資料庫為例
對於OLTP的系統,經常讀寫小塊資料,多為隨機訪問,用IOPS來衡量讀寫效能;
對於資料倉儲,記錄檔,經常讀寫大塊資料,多為順序訪問,用輸送量來衡量讀寫效能。

磁碟當前的IOPS,通過以下效能計數器查看:
LogicalDisk/Disk Transfers/sec
LogicalDisk/Disk Reads/sec
LogicalDisk/Disk Writes/sec

磁碟當前的輸送量,通過以下效能計數器查看:
LogicalDisk/Disk Bytes/sec
LogicalDisk/Disk Read Bytes/sec
LogicalDisk/Disk Write Bytes/sec

 

磁碟讀寫與資料庫的關係

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.