針對 SSD 優化資料庫寫入:來自 VLDB 研究的洞察
現代資料庫與固態硬碟 (SSD) 的互動方式往往被忽視,許多開發者僅將儲存裝置視為簡單的區塊裝置。然而,NAND 快閃記憶體的物理特性——特別是它處理寫入、抹除以及隨之產生的「寫入放大」(write amplification) 的方式——在理論與實際吞吐量之間造成了顯著的效能差距。
最近發表於 VLDB (Very Large Data Bases) 的研究題為「How to Write to SSDs」,深入探討了像 MySQL 和 PostgreSQL 這樣的大規模資料庫在 SSD 上的行為,並為優化儲存模式以減少磨損並提高效能提供了藍圖。
寫入放大的挑戰
SSD 效能問題的核心在於寫入放大的概念。與硬碟 (HDD) 不同,SSD 無法原地覆寫資料。相反地,它們必須在重新寫入之前先抹除一個記憶體區塊。當資料庫執行小型的隨機寫入時,SSD 的內部控制器必須將現有的有效資料移動到新位置,以便為新的寫入清除一個區塊。這個過程會產生一系列的內部寫入,這意味著資料庫的一個邏輯寫入可能會導致對 NAND 快閃記憶體的多次物理寫入。
這種現象不僅會因為驅動器控制器因背景垃圾回收 (garbage collection) 而負擔過重而減慢系統速度,還會加速硬碟的磨損,縮短其使用壽命。
資料庫效能與磨損
該研究專注於這些寫入模式對在單機上運行的龐大資料庫 (約 800GB) 的影響。透過分析 MySQL 和 PostgreSQL,研究強調了不同的儲存引擎行為如何導致寫入放大。
當資料庫使用大量隨機寫入的模式時,效能退化會更加明顯。研究建議,了解 SSD 的物理佈局並將資料庫寫入與這些邊界對齊,可以帶來更優化的儲存資料表格式。從理論上來說,這種優化可以讓資料庫繞過 SSD 的部分內部開銷,從而實現更高的持續吞吐量和更低的延遲。
行業背景與互補技術
雖然研究對資料庫層提供了批判性分析,但社群也注意到,類似的優化也正在檔案系統層進行。例如,Zoned XFS 是一種專門為處理資料放置而設計的 Linux 檔案系統,旨在最小化與區域儲存 (zoned storage) 相關的開銷,而區域儲存與 SSD 的物理特性具有相似的限制。
在 SMR (Shingled Magnetic Recording) 硬碟中也存在類似的情況,SMR 硬碟與 SSD 一樣,需要循序寫入以避免巨大的效能懲罰。這表明儲存工程領域存在一個更廣泛的趨勢:軟體層必須對底層硬體的物理限制具備「感知能力」,才能實現最大效率。
資料庫設計的未來影響
這項研究的發現對資料庫架構的未來具有重大意義。隨著資料量增增長,針對儲存媒介的物理特性進行優化的能力將成為一種競爭優勢。 \n潛在的研究成果包括:
- 新類型資料庫:開發專門針對 NAND 快閃記憶體物理特性的儲存引擎。
- 超優化實作:改進現有系統(如 PostgreSQL)以更好地處理寫入放大。
- SQLite 優化:將類似的分析應用於像 SQLite 這樣的輕量級資料庫,以觀察在單執行緒環境下的寫入密集型工作負載是否會產生類似的瓶頸。
透過將焦點從將儲存裝置視為黑箱,轉向將其視為受管理的物理資源,開發者可以構建既快速又耐用的系統。