云時代的來臨導致很多同學不在那么關(guān)心基礎(chǔ)硬件的選型上面了,很慶幸的玩過了各種磁盤介質(zhì)岂丘,1w 轉(zhuǎn)企業(yè)級 STAT * 8 Raid 10 「BBU、內(nèi)置閃存」到 SSD 到 Pcie SSD,也算見證了在不優(yōu)化任何代碼的前提下祟辟,我們用磁盤抗住了一波波的進攻÷乱蓿「云時代對應的是啥川尖,升配啊。。叮喳”环迹」
機械硬盤
看圖就能看出這個就是一個完全拼轉(zhuǎn)速,拼多碟的冬冬馍悟,可以提高的空間也能想象要么盤更多畔濒,要么提高單次磁頭旋轉(zhuǎn)的效率 「傳統(tǒng)優(yōu)化數(shù)據(jù)庫所有很多系統(tǒng)批量操作,隨機轉(zhuǎn)順序很大程度上面是存儲介質(zhì)的限制了太多的想象锣咒∏肿矗」,為了提高存儲的可用性毅整,自然而然的出現(xiàn)了 Raid 卡這樣一個東西趣兄,raid卡通過多盤綁定 raid0、raid10悼嫉、raid6 等實現(xiàn)了性能與安全性的平衡艇潭,raid 并非上了就高枕無憂了,需要考慮 BBU 充放電的情況戏蔑,此時基本上就無法利用raid卡本身的cache 「這個也是可以監(jiān)控的」蹋凝,所以后來出現(xiàn)了直接在 raid 卡上面放一個小閃存的東西∽芸茫「多年前在測試 MySQL 的時候還發(fā)現(xiàn)了當STAT * 8 Raid 10鳍寂,基本上就已經(jīng)到達Raid卡的瓶頸了,而且之后在高性能 MySQL 一書中作者也提高了這個情況」
SSD
第一次接觸這個東西情龄,也是在公司 DB 到達瓶頸迄汛,又不想拆的情況下,我們直接上了一批 SSD 接著么什么 Slow Query 不存在的骤视。
SSD 全稱 Solid State Disk隔心,就是大家平時提到的固態(tài)硬盤,是一種完全由電子元器件組成的持久化存儲設備尚胞,這是和傳統(tǒng)機械硬盤(Hard Disk Drive硬霍,簡稱 HDD)的重要區(qū)別。SSD 和機械硬盤相比笼裳,有著更高的 IOPS唯卖,更高的帶寬,更低的訪問 latency躬柬,還兼容目前主流的 HDD 接口拜轨,比如 SATA SAS 等。現(xiàn)在市場上的 SSD 主要都是基于 NAND Flash 的允青。
? ? SSD 主要組件
? ? 1. 控制器芯片
? ? 2. NAND 芯片
? ? 3. 電容橄碾,掉電保護,保證數(shù)據(jù)安全性
? ? 4. DRAM,緩存元數(shù)據(jù)
? ? 5. 對外接口法牲,圖中是 SATA 接口
? ? 6. NOR Flash史汗,引導 SSD
? ? NAND 芯片
? ? NAND 是存儲最終數(shù)據(jù)的介質(zhì),NAND 實際上是一種 EEPOM(加電可擦除可編程 ROM),最基本的組成單位稱作 cell拒垃,而 cell是一種類似 MOSFET(金屬-氧化層 半導體場效晶體管)的電子元件停撞。主要的部分是 ControlGate(控制閘,簡稱 CG)和 Floating Gate(浮動閘悼瓮,簡稱 FG)戈毒。CG 的作用就是通過加不同電壓來對 FG 進行充放電,改變 cell 存儲的 bit FG是一個與周圍絕緣的氧化物層横堡,電子可以在 FG 里長久保存而不會輕易泄露埋市,這也是 NAND存儲數(shù)據(jù)非易失的原因。
? ? 上圖也介紹了針對 cell 的三種操作命贴,分別是讀操作 寫操作和擦除操作道宅,先假設每個 cell 只 存儲一個 bit
? ? ? ? 讀操作,在 CG 上加 5V 的電壓套么,然后根據(jù)讀到電壓值去判斷這個 cell 存儲的 是 0 還是 1
? ? ? ? 寫操作,在 CG 上加 20V 電壓碳蛋,電子被 FG 捕獲胚泌,相當于一個充電過程。一般 寫之后還會進行讀校驗肃弟,判斷寫入是否成功玷室,正常寫入完應該是 0
? ? ? ? 擦除操作,加電壓的方向和寫操作正好是相反的笤受,作用也是相反的穷缤,相當于對 FG 的一個放電過程,擦除完成 cell 代表的是 1
? ? Cell 組成 Page箩兽,Page 組成 Block津肛,Block 組成 Plane,Plane 組成 Die汗贫,多個 Die 最終封裝成我 們之前看到的 NAND 芯片身坐。從上面組成中我們重點分析一下 Page 和 Block。Page 主要由兩部分組成落包,Main 和 OOB 兩部分部蛇,Main 主要是存儲實際寫的數(shù)據(jù),而 OOB 主要存儲一些元數(shù)據(jù)信息和 ECC 信息咐蝇,Page 在出廠時一般是 0xFF涯鲁,也就是全部擦出過一遍。 Block 是由一組 Page 來組成。并且還有很重要的一點就是抹腿,Page 是 SSD 最小的讀寫單位岛请,而 Block 是最小的擦除單位,這 就造成了所謂的寫入放大問題(Write Amplification)幢踏。SSD 按照 Block 去擦除髓需,這樣做的原因一 方面是由于底層電路設計限制,另一方面原因是為了 SSD 本身壽命和響應時間考慮房蝉。
? ? Garbage collection
? ? ? ? 垃圾回收指的是回收已經(jīng)失效的數(shù)據(jù)頁僚匆,當然最終回收的時候還是以 block 為單位的。為什么 SSD 需要垃圾回收搭幻,而傳統(tǒng)硬盤不需要呢咧擂。主要有兩點原因構(gòu)成:不支持 In Place Update 和擦除單位最小是 block。我們先引入一個概念 Write amplification 「寫入放大」
上面的公式右邊被稱為寫入放大因子檀蹋,公式是放大因子計算方法松申。寫入放大的原因也是我們之前提到的 SSD 不支持數(shù)據(jù)覆蓋寫。從 SSD 寫入原理來看俯逾,寫入放大因子一般是大于 1 的贸桶,目前企業(yè)級 SSD 的寫入放大因子一般都在 1.1 左右。
? ? 1.首先在數(shù)據(jù)塊 X 的四個可 用頁里寫入 A-D 現(xiàn)在垃圾回收一般都是在后臺去執(zhí)行桌肴,垃圾回收對 讀寫影響還是會比較大的皇筛,所以要控制好這個速度,既要保證當前可用空閑塊比 例坠七,也要保證盡可能不要影響 寫入能力水醋。 提到垃圾回收,還涉及到另外 兩個概念:
? ? 1) Trim
? ? ? ? Trim 是一個 ATA 指令彪置。由操作系統(tǒng)發(fā)送給 SSD 主控制器拄踪,告訴它哪些數(shù)據(jù)占的地址是“無效”的,避免不必要的垃圾回收遷移數(shù)據(jù)拳魁。
? ? 2) Over-provisioning
? ? ? ? OP 簡單來說就是預留空間惶桐,SSD 出廠時候一般都有預留,出廠 OP 空間比例在 10%左右潘懊,用戶也可以自己預留 OP耀盗。OP 可以用于磨損調(diào)度和垃圾回收,OP 空 間越大卦尊,性能越好越穩(wěn)定叛拷,壽命越久,寫入放大比例越低岂却。上面的 Trim 和 OP 都是對垃圾回收效率和提高壽命有好處的忿薇∪雇郑「如果需要較高性能、建議越大越好 個人建議 20%」
? ? 2.在數(shù)據(jù)塊 X 寫入 E-H,然后 對 A-D 進行更新署浩,然后把新 數(shù)據(jù)寫入到 A’-D’,A-D 標記 為無效
? ? 3.為了使 A-D 數(shù)據(jù)頁可用揉燃, 就只能把 E-H 和 A‘-D’復制到 數(shù)據(jù)塊 Y,然后擦除數(shù)據(jù)塊 X
? ? Bad Block Management(壞塊管理)和 ECC
? ? ? ? 關(guān)于壞塊管理筋栋,同樣可以監(jiān)控也必須要監(jiān)控炊汤,先說一下壞塊的來源,第一是出廠時候有一定的壞塊比例弊攘,這個比例 MLC 一般控制在 5%抢腐,SLC 一般控制在 2%。第二是隨著讀寫次數(shù)增加襟交,導致 cell電子泄漏迈倍,無法修復就變成壞塊〉酚颍控制器會維護一張壞塊表啼染,記錄哪些數(shù)據(jù)塊是不可用的。ECC 算法是保證 SSD 數(shù)據(jù)可靠性和壽命的一個非常重要的特性焕梅。尤其在 NAND 制程越來越低的情況下迹鹅,cell 之間的距離越來越小,讀寫都有可能造成對鄰近 cell 的狀態(tài)變化贞言。
個人總結(jié)
? ? 目前企業(yè)級 SSD 主要是兩種類型斜棚,分別是 SATA SSD 和 Pcie SSD,建議在核心實例上面「前提自建IDC」直接考慮Pcie SSD「自帶Raid 5」蜗字,在高吞吐量的分布式數(shù)據(jù)庫中打肝,自帶緩存層或者冷熱數(shù)據(jù)分離功能的數(shù)據(jù)庫脂新,直接將類似數(shù)據(jù)丟到 SSD 中去挪捕,提高瞬時抗壓能力,提高穩(wěn)定性争便〖读悖「其實 STAT SSD 和 Pcie SSD 最最底層的閃存顆粒是一樣的,只是在接口滞乙、與內(nèi)置調(diào)度器算法上面有巨大的差異」奏纪。很多數(shù)據(jù)庫廠商與硬件廠商已經(jīng)在各種嘗試軟硬結(jié)合的解決方案了,在計算存儲分離的趨勢下斩启,其實可以將大量的計算操作下沉到最最底層的硬件服務器上面去執(zhí)行序调,來幫助計算節(jié)點提高效率,同樣在云上面的大量架構(gòu)都是類似的邏輯兔簇,沒有絕對的計算存儲分離都是相對的发绢、是互助的硬耍。重復利用基礎(chǔ)軟件設計 & 底層硬件的優(yōu)勢發(fā)揮最大的效能「是不是也是一種提高效率的表現(xiàn)」。
感謝 微博 zolker 的分享 「漫談SSD原理與應用實踐」边酒,借鑒學習了很多经柴。