聊聊 MySQL Scalability 及 MySQL 8
繼兩天前針對 File system 及 Database 的分享之後,我最近網路上撿到 Oracle
/ MySQL
團隊公開的簡報。
接下來我會整理幾個重點。
█ Scalability
整理了從 MySQL
5.7 正式發布以來,幾項 Scalability [1] 重大待解的問題。有些很難解,有些則是在 MySQL
8 解決了。佛心的講者還提供的臨時解 (workaround)。
原本 MySQL
5.7 的下一版是 5.8,但後來因為改動的幅度之大,所以乾脆直接進級到 MySQL 8。
█ Double write
Double write 也就是我前篇說的 Double buffer。MySQL
5.7 來不及做到的,MySQL
8 會繼續強化。
另外,特別提此頁有個原因,我想介紹 Percona 這家公司。Percona 推出基於官方 MySQL
之上的強化版本,而且免費釋出 [2]。強化的包括這頁說的 Double write,還有未提到的 Thread pool [3],也包進了 Galera cluster 及其他特性等 [4]。
█ File System
File system 對於 Operation system 及 Database 有舉足輕重的地位,這裡評比的是 Ext4
及 XFS
效能。
最後得出,XFS
在大多情況下勝出,但若把 Double write 關掉 [5],則 Ext4
的效能更優。
█ Ext4 Regression
Ext4
發現在 Linux 作業系統上有 Regression 問題,在較舊版本上效能更好,後來證實這是 Ext4
的問題。
█ 最後
同樣如前篇所述,我們還是可以繼續挑戰自己「在什麼應用或場景下,我們應該使用何 Database,搭配何 File system,並開啟 / 關閉 Database 及 File system 的何設定以彼此配合而不是拉扯,以期滿足我們的需求」的問題。
若單討論效能,MySQL
5.7 與 MySQL
8 的差別是,MySQL
5.7 的讀效能較優,而 MySQL
8 的寫效能較優 [6]。
█ 標註
[1] 為何不稱為 Performance,有興趣的可以想一想。
[2] Percona 主要賺的是顧問費,例如幾年前協助 Uber 把自家 PostgreSQL 改用為 MySQL。
[3] Thread pool 在 MySQL 付費的 Enterprise 版本才有。
[4] 你能夠區分 MySQL / MariaDB / Percona 之別嗎?
[5] 關掉 Double write 的缺點是什麼?
[6] 讀效能高比較好,還是寫效能高比較好?為什麼 MySQL 8 選擇後者?