SSD 較傳統硬碟較具效能優勢,但多出的優勢很可能會因資料寫入策略而有所減損。

SSD 因為 GC 特性勢必會遇到「寫入放大」效應。即 10 MB 的資料,通常應該只要寫入 10 MB,但因為 SSD 的特性,往往最終寫入的資料量會超過 10 MB,一般多出 2 ~ 3 倍都還算正常 (即使如此 SSD 還是比傳統硬碟快許多)。

「寫入放大」效應除了造成效能減弱及抖動外,還會降低 SSD 的壽命,因為寫入量多了。

當 SSD 遇上資料庫存取策略時,會發生什麼事?

通常寫入放大效應由高至低 (由壞至好) 為:INSERT/DELETE (PostgreSQL) > update-in-place (MySQL) > log-structured。

但一般 log-structured 還會執行 rewrite 及 compaction,例如 Cassandra / LevelDB / RocksDB,所以寫入放大效應會比 PostgreSQL 及 MySQL 高出許多,甚至很可能變成 10 倍以上 (10 MB 的資料實際寫入超過 100 MB)。

所以 log-structured 類的資料庫在 SSD 應用中,參數的配置顯得更為重要。而 Facebook 的 RocksDB 相較於 Google LevelDB 提供了更多的可控參數,通常也較能夠處理「寫入放大」的問題。