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