硬盤是如何影響數(shù)據(jù)庫性能的?
前面松哥和大家聊了 CPU 和內(nèi)存對于數(shù)據(jù)庫性能的影響,但是大家想想,無論如何,數(shù)據(jù)最終都是要存入硬盤中的,所以硬盤肯定也會影響到數(shù)據(jù)庫的性能,那么硬盤到底是如何影響數(shù)據(jù)庫性能的,今天我們就來簡單聊聊。
- 硬盤的使用,有四個不同的方向:
- 傳統(tǒng)的機械硬盤。
- 使用 RAID 增強機械硬盤性能。
- 使用固態(tài)存儲 SSD。
使用網(wǎng)絡(luò)存儲 NAS 和 SAN。
接下來我們就針對這四個方向逐一進行分析。
1.機械硬盤
這是最為常見的一種硬盤。松哥剛上大學(xué)那會,買筆記本電腦,基本上都是這種機械硬盤。不過現(xiàn)在小伙伴們買電腦,應(yīng)該很多都是固態(tài)硬盤了。機械硬盤的特點就是便宜、單盤存儲空間較大,不過問題也很明顯,那就是讀寫較慢,相比于內(nèi)存每秒 10GB 以上的數(shù)據(jù)傳輸,機械硬盤的數(shù)據(jù)真的慢的可憐。我剛畢業(yè)的時候,有一段時間特別想買 Mac,特別糾結(jié)。后來把我的 Windows 筆記本的機械硬盤換成了固態(tài)硬盤,開機可以秒開了,才把買 Mac 的想法掐滅了(一滅就是三年,三年后還是入手了 Mac)。
現(xiàn)在主流的機械硬盤基本上都是 7200 轉(zhuǎn)的 SATA 硬盤,在全速運轉(zhuǎn)并且是順序讀寫的情況下,性能也就是 150MB~160MB/s 左右;如果涉及到數(shù)據(jù)庫讀寫等隨機性較強的 IO 操作,這個性能還要再下降。
傳統(tǒng)的機械硬盤在讀寫數(shù)據(jù)的時候,有三個步驟:
- 尋道:磁頭定位到數(shù)據(jù)所在的磁道上,這是一個非常耗時的操作。目前 SATA 硬盤的平均尋道時間一般為 8~10 ms。
- 旋轉(zhuǎn)延遲:到了特定的磁道之后,硬盤盤片需要旋轉(zhuǎn),以便要讀寫的扇區(qū)能夠和磁頭吻合。7200 轉(zhuǎn)的硬盤,旋轉(zhuǎn)一周的時間為 1000/120=8.33 毫秒,平均旋轉(zhuǎn)延時則為 4.17 毫秒左右。
- 數(shù)據(jù)傳輸:磁頭定位到需要讀取的扇區(qū)之后,開始傳輸數(shù)據(jù)。假設(shè)硬盤順序讀取的平均速度為 150MB/s,則讀取 4KB 的數(shù)據(jù)需要 4KB*1000/(150*1024KB)=0.026 毫秒,此值幾乎可以忽略不計。讀取 1MB 的數(shù)據(jù)需要 1MB*1000/(150MB)=6.67 毫秒,可見讀取大塊數(shù)據(jù)時,其真正用來讀取數(shù)據(jù)的時間一般也小于尋道時間和旋轉(zhuǎn)延時的和。
上面三個步驟所耗費的時間,也就是數(shù)據(jù)讀取的時間。
那么該如何選擇磁盤呢?我們應(yīng)該從如下幾個方面來考慮:
- 單盤容量盡量大。
- 數(shù)據(jù)傳輸速度盡量快,這個取決于磁盤主軸轉(zhuǎn)動速度,以及數(shù)據(jù)存儲在磁盤表面的密度,一般來說,這個并不會成為我們的瓶頸。
- 訪問時間盡量夠快。
- 主軸轉(zhuǎn)速盡量快,根據(jù)上面的介紹,磁盤的轉(zhuǎn)速會影響到數(shù)據(jù)的訪問時間和讀取時間。
- 還有一個就是磁盤的物理尺寸。這個也好理解,磁盤越小,數(shù)據(jù)讀取速度肯定越快。不過一般來說,磁盤越小,意味著存儲空間可能也會變小,這就和第一點相悖了,在實際選擇中需要權(quán)衡。
2.RAID
獨立硬盤冗余陣列(RAID, Redundant Array of Independent Disks),以前也叫廉價磁盤冗余陣列(Redundant Array of Inexpensive Disks),簡稱磁盤陣列。RAID 利用虛擬化存儲技術(shù)把多個硬盤組合起來,成為一個或多個硬盤陣列組,目的為提升性能或?qū)崿F(xiàn)數(shù)據(jù)冗余,或是兩者同時提升。
在具體運行中,RAID 層級不同,資料也會以多種模式分散于各個硬盤,RAID 層級的命名會以 RAID 開頭并帶數(shù)字,例如:RAID0、RAID1、RAID5、RAID6、RAID7、RAID01、RAID10、RAID50、RAID60,每種層級都有其理論上的優(yōu)缺點,不同的層級在數(shù)據(jù)冗余和性能提升兩個目標間獲取平衡。
簡單來說,RAID 把多個硬盤組合成為一個邏輯硬盤,因此,操作系統(tǒng)只會把它當作一個實體硬盤。RAID 常被用在服務(wù)器電腦上,并且常使用完全相同的硬盤作為組合,由于硬盤價格的不斷下降同時 RAID 功能更加有效地與主板集成,這使得 RAID 成為普通用戶的一個選擇,特別是需要大容量存儲空間的工作使用 RAID 就特別合適,如:視頻與音頻制作。
我們來看看幾個常見的 RAID 層級:
RAID0
RAID0 亦稱為數(shù)據(jù)條帶,它將兩個以上的磁盤并聯(lián)起來,成為一個大容量的磁盤。在存放數(shù)據(jù)時,分段后分散存儲在這些磁盤中,因為讀寫時都可以并行處理,所以在所有的級別中,RAID0 的速度是最快的(想當于可以同時讀取兩個磁盤)。但是 RAID0 既沒有冗余功能,也不具備容錯能力,如果一個磁盤(物理)損壞,所有數(shù)據(jù)都會丟失,RAID0 也是實現(xiàn)成本最低的 RAID 模式。在一些不擔心數(shù)據(jù)丟失的場景下(例如數(shù)據(jù)備份),可以使用 RAID0。
RAID1
兩組以上的 N 個磁盤相互作鏡像,在一些多線程操作系統(tǒng)中能有很好的讀取速度,理論上讀取速度等于硬盤數(shù)量的倍數(shù),與 RAID 0 相同,另外寫入速度有微小的降低(因為要寫到兩個磁盤上去)。RAID1 只要一個磁盤正常即可維持運作,可靠性最高。
其原理為在主硬盤上存放數(shù)據(jù)的同時也在鏡像硬盤上寫一樣的數(shù)據(jù),當主硬盤(物理)損壞時,鏡像硬盤則代替主硬盤的工作。因為有鏡像硬盤做數(shù)據(jù)備份,所以 RAID 1 的數(shù)據(jù)安全性在所有的 RAID 級別上來說是最好的。但無論用多少磁盤做 RAID 1,僅算一個磁盤的容量,所以它又是所有 RAID 中磁盤利用率最低的一個級別。RAID 1 可以在不影響性能的前提下,最大限度保證系統(tǒng)的可靠性和可修復(fù)性。
如果用兩個不同大小的磁盤建 RAID 1,可用空間為較小的那個磁盤,較大的磁盤多出來的空間也可以分割成一個區(qū)來使用,不會造成浪費。
RAID5
RAID5 也稱之為分布式奇偶校驗磁盤陣列,這種方式通過分布式奇偶校驗塊把數(shù)據(jù)分散到多個磁盤上,這樣如果任何一個盤數(shù)據(jù)丟失,都可以從奇偶數(shù)據(jù)校驗塊中重建。但是如果是兩個盤的數(shù)據(jù)丟失,則整個數(shù)據(jù)卷就無法恢復(fù)了。
RAID10
RAID 10 是先分割數(shù)據(jù)再鏡像。首先將所有硬盤分為兩組,先對磁盤做 RAID1,然后再對兩組 RAID1 的磁盤做 RAID 0,所以它的讀寫性能都比較好。
RAID 01 則是跟 RAID 10 的程序相反,先對磁盤做 RAID0,再做 RAID 1。
當 RAID 10 有一個硬盤受損,其余硬盤會繼續(xù)運作,而 RAID 01 只要有一個硬盤受損,同組 RAID 0 的所有硬盤都會停止運作,只剩下其他組的硬盤運作,可靠性較低。因此,RAID 10 比 RAID 01 常用,零售主板絕大部分支持 RAID 0/1/5/10,但不支持 RAID 01。
那么選哪種呢?下面這張表比較了不同 RAID 層級各自的特點:
3.固態(tài)硬盤
固態(tài)硬盤不需要多說,相比于傳統(tǒng)的機械硬盤有如下三個優(yōu)勢:
- 沒有機械結(jié)構(gòu),不怕震動(震動有可能讓磁頭撞到碟片上劃花碟片導(dǎo)致?lián)p壞)。
- 沒有尋道過程,因此讀寫文件的延遲更低。
- 連續(xù)讀寫文件的速度一般比機械硬盤快。
目前SSD的主流接口分為,SATA 3.0、M.2、PCI-E 三種,U.2 和 mSATA 目前并不多見。
SATA 和 M.2 或 PCI-E 的主要區(qū)別在于二者采用不同的通道:PCI-E 通道的汽車就像是在高速上行駛,而 SATA 通道的汽車就像是在崎嶇山路上行駛,你說哪個速度快?
下面這張表格描述了不同接口的傳輸速率:
相比于機械硬盤,固態(tài)硬盤具有更好的隨機讀寫功能,順序讀寫其實機械硬盤也不差,但是隨機讀寫就會差很多,而數(shù)據(jù)庫操作中,隨機讀寫又很重要,所以固態(tài)硬盤的優(yōu)勢明顯。
4.網(wǎng)絡(luò)存儲
網(wǎng)絡(luò)存儲其實不太適合存儲數(shù)據(jù)庫文件,光是網(wǎng)絡(luò)延遲就夠令人崩潰了。不過如果想存放數(shù)據(jù)庫備份文件,倒是可以用網(wǎng)絡(luò)存儲。另外就是需要注意數(shù)據(jù)庫服務(wù)器的帶寬要夠用,別上面的東西整了一大堆,最后服務(wù)器帶寬 128KB。。。
參考資料:
https://zhuanlan.zhihu.com/p/19592076
https://ssd.zol.com.cn/676/6766649_all.html
本文轉(zhuǎn)載自微信公眾號「江南一點雨」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系江南一點雨公眾號。