網(wǎng)絡(luò)帶寬如何影響 MySQL 性能
網(wǎng)絡(luò)是數(shù)據(jù)庫基礎(chǔ)架構(gòu)的主要部分。但是,通常性能基準(zhǔn)測試是在本地計算機(jī)上完成的,客戶端和服務(wù)器并置在一起。這樣做是為了簡化結(jié)構(gòu)并排除一個以上的變量(網(wǎng)絡(luò)部分),但是我們也忽略了網(wǎng)絡(luò)對性能的影響。
對于像 MySQL Group Replication 這樣的產(chǎn)品集群來說,網(wǎng)絡(luò)更為重要。
在這篇文章中,我將介紹網(wǎng)絡(luò)設(shè)置。這些都是簡單而微不足道的,但卻是讓我們更了解復(fù)雜網(wǎng)絡(luò)設(shè)置效果的基石。
安裝
我將使用兩臺裸機(jī)服務(wù)器,通過專用的 10Gb 網(wǎng)絡(luò)連接。
我將通過使用 ethtool-s eth1 speed1000duplex full autoneg off 命令更改網(wǎng)絡(luò)接口速度來模擬 1Gb 網(wǎng)絡(luò)。

我將運(yùn)行一個簡單的基準(zhǔn):
- sysbench oltp_read_only --mysql-ssl=on --mysql-host=172.16.0.1 --tables=20 --table-size=10000000 --mysql-user=sbtest --mysql-password=sbtest --threads=$i --time=300 --report-interval=1 --rand-type=pareto
運(yùn)行時線程數(shù)從 1 到 2048 不等。所有數(shù)據(jù)都適合內(nèi)存 -innodb_buffer_pool_size 足夠大。因此工作負(fù)載在內(nèi)存中占用大量 CPU:沒有 IO 開銷。
操作系統(tǒng):Ubuntu 16.04
N1 基準(zhǔn)-網(wǎng)絡(luò)帶寬
在第一個實(shí)驗(yàn)中,我將比較 1Gb 網(wǎng)絡(luò)和 10Gb 網(wǎng)絡(luò)。


顯然,1Gb 網(wǎng)絡(luò)性能是這里的瓶頸,如果我們遷移到 10Gb 網(wǎng)絡(luò),我們可以顯著改善我們的結(jié)果。
要查看 1Gb 網(wǎng)絡(luò)是瓶頸,我們可以檢查 PMM(percona 的數(shù)據(jù)庫監(jiān)控管理開源工具) 中的網(wǎng)絡(luò)流量圖表:

我們可以看到我們的吞吐量達(dá)到了 116 MiB/s(或 928 Mb/s),這非常接近網(wǎng)絡(luò)帶寬。
但是,如果我們的網(wǎng)絡(luò)基礎(chǔ)設(shè)施僅限于 1Gb,我們可以做些什么?
N2 基準(zhǔn)-協(xié)議壓縮
MySQL 協(xié)議中有一個功能,您可以看到客戶端和服務(wù)器之間的網(wǎng)絡(luò)交換壓縮:--mysql-compression=on。
讓我們看看它將如何影響我們的結(jié)果。


這是一個有趣的結(jié)果。當(dāng)我們使用所有可用的網(wǎng)絡(luò)帶寬時,協(xié)議壓縮實(shí)際上有助于改善結(jié)果。


但是 10Gb 網(wǎng)絡(luò)不是這種情況。壓縮/解壓縮所需的 CPU 資源是一個限制因素,通過壓縮,吞吐量實(shí)際上只達(dá)到我們沒有壓縮的一半。
現(xiàn)在讓我們談?wù)剠f(xié)議加密,以及如何使用 SSL 影響我們的結(jié)果。
N3基準(zhǔn)-網(wǎng)絡(luò)加密




對于 1Gb 網(wǎng)絡(luò),SSL 加密顯示了一些損失 - 單線程約為 10% - 但是否則我們再次達(dá)到帶寬限制。我們還看到了大量線程的可擴(kuò)展性,這在 10Gb 網(wǎng)絡(luò)案例中更為明顯。
使用 10Gb 時,SSL 協(xié)議在 32 個線程后不會擴(kuò)展。實(shí)際上,它似乎是 MySQL 目前使用的 OpenSSL 1.0 中的可伸縮性問題。
在我們的實(shí)驗(yàn)中,我們看到 OpenSSL 1.1.1 提供了更好的可伸縮性,但是您需要從鏈接到 OpenSSL 1.1.1 的源代碼中獲得特殊的 MySQL 構(gòu)建才能實(shí)現(xiàn)這一點(diǎn)。我沒有在這里展示它們,因?yàn)槲覀儧]有生產(chǎn)二進(jìn)制文件。
結(jié)論
1. 網(wǎng)絡(luò)性能和利用率將影響一般應(yīng)用程序吞吐量。
2. 檢查您是否達(dá)到了網(wǎng)絡(luò)帶寬限制。
3. 如果受到網(wǎng)絡(luò)帶寬的限制,協(xié)議壓縮可以改善結(jié)果,但如果不是,則可能會使事情變得更糟。
4. SSL 加密在線程數(shù)量較少的情況下會有一些損失(約10%),但對于高并發(fā)工作負(fù)載,它不會擴(kuò)展。