閃存存儲特性以及數據庫相關優化思路
閃存的特性,閃存的劣勢及其解決機制,以及采用閃存存儲時數據庫的一些優化思路。
目錄
-
閃存的 特性
-
閃存的劣勢及其解決機制
-
數據庫場景測試
一.閃存的特性
凡是采用Flash Memory的存儲設備,可以統稱為閃存存儲。我們經常談的固態硬盤(SSD),可以由volatile/non-volatile memory構成,其實固態硬盤的范疇是大于閃存的,只是當前的固態硬盤大多數采用閃存介質,所以很多時候我們默認固態硬盤就是閃存盤。
除了閃存以外,還有其它多種快速存儲技術,如DRAM ,NVRAM, MRAM and Spin-Torque(自旋力矩磁阻式隨機存取內存), Carbon Nanotube( 碳納米管 ), Phase Change Memory(相變內存),Memristor ( 憶阻器 )等等。
未來存儲設備的創新其實就是存儲材料的創新,這也是國外很多初創的半導體公司一個研發的方向。
從半導體的角度來看,閃存屬于非易失性存儲,但是屬于不可靠介質。因為閃存是采用電子驅動,因此具有電子元器件所固有的缺陷,電子泄露,衰減等等。
決定閃存存儲大規模應用的主要因素是量產規模、穩定性以及經濟性。
閃存設備隨著使用時間和數據量的增長,壞塊會逐漸增加,會產生大量的ECC Error,這時設備性能和可靠性會大幅度下降,對應用性能和數據安全帶來影響。閃存產品在使用過程中往往會存在性能衰減和可靠性下降的問題。這里提醒一下,如果我們使用閃存產品,一定要使用工具監控閃存產品的健康狀態,防止老化,數據丟失。
通過對閃存產品的良好設計和質量控制,也可以避免性能衰減和可靠性下降的問題,但是往往會帶來成本的增加和性能的下降(相比于直寫閃存)。
對于企業級應用而言,穩定是第一位,其次是易用性,第三才是性能。閃存設備的性能相比于應用的需要是足夠的。
閃存在企業級以及數據中心的應用,實際上也是依賴于互聯網以及大數據的興起。
互聯網的分布式架構以及多副本保護機制,消除了集中式存儲的瓶頸,滿足了海量用戶以及應用的請求,帶來了更高的性能需求。同時多副本的保護機制,又解決了閃存作為不可靠介質可能帶來的數據存儲安全的問題。
但是由于閃存的可靠性問題,其實互聯網客戶也是有選擇地在特定業務上使用閃存,并不是在所有業務上都使用閃存設備。
有的時候我們還會發現意外斷電后,閃存設備故障,這往往是由于電路保護機制不完善或固件bug造成的。
二. 閃存的劣勢及其解決機制
在使用閃存設備的時候,我們需要考慮的問題要比使用磁盤多。
當前我們碰到的很多問題是,相比于IOPS,閃存比磁盤性能高上幾十甚至上百倍,但是我們將數據放置到閃存上,性能提升并沒有這么高,甚至沒有提高。
原因是閃存主要解決的是IO性能問題,并且主要隨機寫的性能,而順序讀寫性能并不如多塊磁盤匯聚之后的性能。
Linux文件系統
以Linux為例,Linux ext4屬于日志型文件系統,為了保護數據安全,通過Journal機制提供一致性保護。那么我們在部署過程中可以將Journal日志放置到閃存上,可以提升IO性能。因為應用的IO操作還是通過OS層面完成的,因此OS層面的IO性能提升也可以帶來應用性能提升。
另外,操作系統以及應用的IO層往往是針對磁盤的特性進行了優化,這些優化往往不適用于閃存設備,甚至還有副作用。例如OS層面IO scheduler有三種模式,CFQ、Deadline和noop,其中前兩種模式是針對磁盤低IO特性和物理尋道機制進行優化的,例如做IO合并、尋道算法等等,會有默認的等待嚴實以等到更多的IO block進行合并和處理。對于閃存而言,是不存在尋道處理的,因此前兩種處理機制反而會造成延時增加。如果我們在系統中使用了SSD,需要將IO scheduler調整為noop模式。
三. 數據庫場景測試
剛才談到為了保證數據安全,我們需要在Linux采用Journal模式,但是MySQL也有double write的機制,我們需要怎么既保證數據安全,又不會增加過多的機制造成性能下降。我們在我們的閃存產品上做了這方面的測試。
上面是mySQL的寫入機制。當系統意外斷電時,數據庫16K的頁面可能沒有完成,就會出現partial write,而partial write會造成數據庫損壞。
MySQL 的Double write就是為了解決partial write造成的問題,但是DW也會帶來兩個問題,性能懲罰和對SSD的磨損增加。
我們按照上面的場景在我們的閃存卡上進行了測試。
在安全性層面,只要Metadata Journal+DW或Metadata Journal+Data Journal,都可以保護數據庫數據的安全,也就是意外掉電數據不會損壞,數據庫可以正常啟動,數據不丟失。
但是在CPU bound的情況下,前個組合的性能衰減(8%)要小于后面的保護組合(10%)。如果是在IO bound的情況下,前個組合的性能衰減(10%)要小于后面的保護組合(34%)。但是DW下的數據寫入量會比后者增加23%,也就是會增加SSD的磨損。這個是我們在應用時需要注意的。
另外,我們在做DB2的測試時也發現幾個問題:
閃存存儲在非分區表的簡單的查詢統計條件的查詢方面具有明顯的優勢和性能提升,性能提升3到4倍,但是在分區表的統計和加限制條件的查詢方面的性能提升并不明顯。而且對相應的復雜的存儲過程的統計計算未能體現出優勢。這可能是由于分區表設計機制主要是面向磁盤性能優化,在閃存上反而有負面影響。
另外我們在Oracle數據庫上應用閃存測試時發現,帶子查詢的多表關聯查詢語句的存儲過程的調用性能表現很差,查看AWR發現大量的cache latch,出現長時間等待, 而在磁盤存儲上沒有這種情況。我們分析是由于閃存的性能比磁盤高很多,造成cursor數據量大,緩存內的latch沖突增加。通過增大share pool和將復雜查詢處理簡化為多個小查詢處理可以解決這個問題,性能也得到明顯提升。
Q1 : 請問閃存和磁盤的比較中MTBF是什么意思?
A1 :MTBF(Mean Time Before Failure),失敗前平均工作時間。閃存其實是沒有MTBF的概念的,因為閃存有擦寫次數的限制,數據擦寫到一定數量后,閃存介質就會物理性地損壞,閃存的壽命是可以通過監控使用狀況推算出來的。而磁盤的損壞其實是概率,會有MTBF指標。
Q2 : 請問在測試db2的時候,是dpf環境,還是單機?
A2 :單機。
Q3 :mysql是基于xfs測試的嗎?
A3 :Mysql測試時是基于ext4的。
Q4 :閃存產品有沒有不同的系列,類似傳統的高中低端存儲那樣的分類?
A4 :閃存也分高中低的,用于企業級高性能的一般以PCIe NVMe卡的形式為主。其實閃存產品的質量標準還有很多細分,這里就不細說了。
Q5 :請問能談談Spacex用的閃存產品嗎?
A5 :SpaceX用的是我們嵌入式閃存產品,和我們企業級閃存采用同樣的技術架構和閃存顆粒。主要用于控制代碼存儲和運行狀態數據存儲。
Q6 :請問您有測過云主機的ssd 嗎?
A6 : 云主機的SSD基本上都采用SATA SSD,當前云計算平臺在數據庫應用方面還是個弱項。我們下一步計劃在ceph分布式存儲上進行數據庫測試,這也是嘗試在云計算平臺上運行關鍵數據庫應用。
Q7 :寫放大,和抖動的問題現在已經改善了很多吧?
A7 :寫放大和抖動問題是考驗閃存廠商的一個關鍵指標,在產品設計的時候就要考慮。各家處理的方式都不一樣。我們能做到最大的WAF是6。而在性能抖動方面自認為處理最好的是我們的產品,因為性能抖動主要是由垃圾回收處理和磨損平衡處理引起的。而我們采用的分區擦除算法和三重磨損平衡算法是完全基于對閃存顆粒底層的特性了解和經驗積累。另外SSD還有一個很大的問題是性能衰減。使用1,2年后,性能可能只有原來的一半或者更低,性能波動也會頻繁出現。
講師介紹:李炫輝
-
現任綠芯半導體系統科技(上海)有限公司業務發展副總裁,負責閃存解決方案的市場推廣和管理。
-
從事信息化工作二十多年,先后在戴爾公司以及惠普公司負責企業級解決方案和存儲產品管理及銷售工作。
-
曾任戴爾中國區解決方案部高級技術經理,負責戴爾企業級解決方案架構設計,管理和實施, 先后負責Dell互聯網行業客戶以及能源金融制造業服務器、存儲和網絡解決方案。
小編精心為大家挑選了近日最受歡迎的幾篇熱文:
回復 001 ,看楊志洪《【職場心路】一個老DBA的自白》;
回復 002 ,看丁俊的《【重磅干貨】看了此文,Oracle SQL優化文章不必再看!》;
回復 013 ,看 呂海波《去不去O,誰說了算?》;
回復 014 ,看 楊德勝 《Oracle故障日志采集“神助攻”—TFA工具詳解》;
回復 015 ,看 郭耀龍《假事務之名,深入研究UNDO與REDO》;
回復 016 ,看 陳能技《基于Docker的開發模式驅動持續集成落地實施》;
回復 017 ,看 朱賢文《數據庫與存儲系統》;
回復 018 ,看 盧鈞軼《揭秘非死book數據庫備份策略》;
回復 019 ,看 王佩《基于Docker的mysql mha 的集群環境構建實踐》;
回復 020 ,看 王津銀《互聯網運維的整體理念與最佳實踐》
DBA+社群是中國最大的涵蓋各種架構師、數據庫、中間件的微信社群! 線上分享2次/周、線下沙龍1次/月,頂級峰會6次/年,直接受眾10000+,間接影響50萬+ITer。 DBA+社群致力于搭建一個學習交流、專業人脈、跨界合作的公益平臺,更多精彩請持續關注dbaplus微信訂閱號!
掃碼關注
DBAplus社群
超越DBA圈子,連接的不僅僅是DBA