生不逢時的openZFS能用在資料庫上嗎
在Linux上有很多耳熟能詳的檔案系統,EXT4,XFS,哪怕BTRFS也比openZFS出名,不過很多40出頭的IT人還是對ZFS有些印象的。很多人都覺得openZFS有點生不逢時,正當ZFS準備和LINUX緊密聯姻的時候,SUN被Oracle收購了,於是這也註定了ZFS的前路坎坷。在國外的很多IT社群裡,都給ZFS打上了“originally Sun , but “got Oracled””這樣的標籤。在IT領域“got Oracled”不是個好詞,很多好技術都被Oracle收購了,並且消滅了。
ZFS是和普通的檔案系統完全不同的,它是一種帶有嚴格一致性的檔案系統,是一種日誌結構的檔案系統。類似於資料庫,ZFS依靠類似WAL的機制來保證檔案系統的一致性。因此ZFS可以隨時保持十分強的一致性,有過伺服器掉電後檔案系統掛掉或者變成只讀狀態的朋友可能現在還會心有餘悸,在ZFS上是永遠不需要fsck的,因為WAL可以幫助我們自動糾正這些不一致問題。
ZFS採用COW(COPY ON WRITE)的方式修改資料,這一點與SSD的行為類似,這種方式是個雙刃劍,可以獲得較好的讀寫平衡,但是會帶來寫放大的問題,資料的修改操作會有較高的成本。
ZFS的RAID-Z技術被稱為窮人的福音,使用RAID-Z技術,可以把多塊硬碟組成一個軟RAID系統從而確保資料的安全性。同時ZFS支援資料壓縮,可以讓資料的儲存成本進一步降低。
ZFS支援十分強大的快照技術,透過快照閃回或者克隆資料都十分方便。這給資料保護,資料備份、資料複製等都提供了十分強大的保障。
如此複雜的檔案系統,其附加開銷肯定十分大,為了確保ZFS的效能,採用了記憶體中修改,並以強一致性事務的方式存檔的模式。如果你的硬體環境較好,配置有較多的實體記憶體,那麼在記憶體中完成寫操作,並且將日誌寫在效能極佳的NVME SSD盤上,將海量資料寫入大容量HDD中,那麼當你的寫IO不會大到擊穿記憶體緩衝的時候,ZFS檔案系統是能夠表現出十分優秀的寫入效能的。
對於ZFS的效能問題,網路上有很多不同的關鍵,也有不同的測試結果。用比較中肯的觀點來說,任何的好處都是有代價的,ZFS在確保資料安全的前提下,肯定會在效能上有所欠缺。一些認為ZFS效能很差的朋友可能並沒有做好調優,一些認為ZFS效能十分優秀的朋友可能其測試場景過於單一和簡單。一般來說,與EXT4/XFS等傳統檔案系統相比,ZFS在大量永續性寫入場景的效能肯定要差不少,對於讀寫較為均衡的OLTP系統來說,ZFS的效能與EXT4十分接近並略低一些。在某些OLTP資料庫場景中,因為ZFS的記憶體中寫與讀緩衝機制,也可能會表現出比EXT4/XFS更好的效能。
比如當我們在ZFS上跑PG或者MySQL的時候,因為檔案系統是可以確保不會出現塊斷裂問題的,因此我們就可以關閉FULL PAGE WRITE,從而獲得更好的併發效能。這實際上就是我昨天討論過的,把資料庫的工作交給OS來做的一個例子。
實際上,ZFS的調優也沒那麼複雜,如果你有我上面說的這樣的環境,較大的實體記憶體,SSD盤做日誌寫入,那麼下面的調整方案可能就足以 ZFS表現出不錯的效能了。雖然ZFS檔案系統上做針對性的調優比較複雜,因為針對不同的資料保護模式,不同的緩衝策略和壓縮策略,會有十分複雜的配置。不過一般情況下,調整並不複雜:
lrecordsize=8kB;
llogbias=throughput [latency] :根據你的應用場景需求可以選擇吞吐量和延時,針對高併發要求的OLTP應用,可以選擇LATENCY,對於具有大量資料掃描的分析類應用,可以選擇throughput;
lzfs_arc_max :一定要設定該引數,避免arc cache佔用過多的記憶體,導致作業系統換頁。
有興趣的朋友可以找時間試試ZFS的效能是否能夠滿足你的應用需求。我覺得不追求極致效能的情況下,ZFS的強一致性保障與資料壓縮能力已經能夠讓我們得資料庫系統受益良多了。
目前openZFS社群是十分活躍的,今年年初推出的2.1.7版本支援3.10-6.0的LINUX核心,與一直不夠成熟的BTRFS相比,我還是更推薦openZFS。實際上我們的國產資料庫廠商也可以試著考慮一下openZFS,利用這個開源專案為自己的資料庫產品開發一個底層儲存元件,用在自己的資料庫一體機上。
來自 “ 白鱔的洞穴 ”, 原文作者:白鱔;原文連結:https://mp.weixin.qq.com/s/-8i9o571Imu7XqTvrRD0ow,如有侵權,請聯絡管理員刪除。
相關文章
- Redis能保證資料不丟失嗎?Redis
- 生不逢時的《重灌機兵》,是整個紅白機年代的落日餘暉
- 你能說說你理解的資料庫規範嗎?資料庫
- 我應該手動修改線上資料庫的資料嗎?資料庫
- 行動硬碟不認盤還能資料恢復嗎?硬碟資料恢復
- 剛回國就下架日服的《瑪娜希斯迴響》:很可惜,但不至於生不逢時
- 雲資料庫時代,誰能夠執牛耳?資料庫
- 微軟 Cosmos DB 能擊敗AWS雲資料庫嗎?微軟資料庫
- 生產資料庫、開發資料庫、測試資料庫中的資料的區分資料庫
- 實時資料庫與時序資料庫資料庫
- 新的時代下還需要感悟資料庫的本質嗎資料庫
- 用在資料科學上的 Python:你可能忘記的 8 個概念資料科學Python
- laravel、lumen等.env檔案資料庫密碼配置正確,連不上資料庫Laravel資料庫密碼
- oracle 程式滿了,登陸不上資料庫的解決方法Oracle資料庫
- local資料夾能刪除嗎
- Jtti:連線不上SQL資料庫怎麼解決?JttiSQL資料庫
- 帝國cms連線不上資料庫怎麼辦資料庫
- 帝國cms資料庫連線不上怎麼辦資料庫
- RenderTexture用在RawImage上時要注意的顏色混合問題
- 安裝帝國系統時 出現您的資料庫使用者名稱或密碼有誤,連結不上MYSQL資料庫?資料庫密碼MySql
- 資料中臺|能幹啥?怎麼做?用在哪?
- 應用程式偶發連線不上資料庫的排查案例資料庫
- 賽點時刻:線上教育能“燒”出未來嗎
- 濤思資料加入龍蜥社群,攜手共建時序資料庫生態資料庫
- 有方法能夠把手機安裝的 app 的資料同步到電腦上的工具嗎APP
- 多路複用在HMI上的使用
- 時間序列化資料庫選型?時序資料庫的選擇?資料庫
- Prometheus時序資料庫-資料的查詢Prometheus資料庫
- Laravel-admin修改圖片上傳時存入資料庫的URLLaravel資料庫
- 時序資料庫資料庫
- SnappyDB—Android上的NoSQL資料庫APPAndroidSQL資料庫
- [20190102]連線串不配置服務名能連線資料庫嗎.txt資料庫
- 你真的會使用資料庫的索引嗎?資料庫索引
- 寶塔安裝mysql5.7資料庫怎麼連不上MySql資料庫
- 資料夾能直接設定密碼嗎 資料夾加密的常用方法密碼加密
- 從資料庫中拿資料庫總是拿到上一條資料,還能拿到刪除的表的資料資料庫
- 新媒體運營能學會嗎?不會寫東西能學嗎?
- [提問交流]OT的資料庫引擎可以換成InnoDB資料庫引擎嗎?資料庫