繼兩天前針對 File system 及 Database 的分享之後,我最近網路上撿到 Oracle / MySQL 團隊公開的簡報。

接下來我會整理幾個重點。

█ Scalability

img

整理了從 MySQL 5.7 正式發布以來,幾項 Scalability [1] 重大待解的問題。有些很難解,有些則是在 MySQL 8 解決了。佛心的講者還提供的臨時解 (workaround)。

原本 MySQL 5.7 的下一版是 5.8,但後來因為改動的幅度之大,所以乾脆直接進級到 MySQL 8。

█ Double write

img

Double write 也就是我前篇說的 Double buffer。MySQL 5.7 來不及做到的,MySQL 8 會繼續強化。

另外,特別提此頁有個原因,我想介紹 Percona 這家公司。Percona 推出基於官方 MySQL 之上的強化版本,而且免費釋出 [2]。強化的包括這頁說的 Double write,還有未提到的 Thread pool [3],也包進了 Galera cluster 及其他特性等 [4]。

█ File System

img

img

File system 對於 Operation system 及 Database 有舉足輕重的地位,這裡評比的是 Ext4XFS 效能。

最後得出,XFS 在大多情況下勝出,但若把 Double write 關掉 [5],則 Ext4 的效能更優。

█ Ext4 Regression

img

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 選擇後者?