1. 程式人生 > 其它 >MySQL 5.6, 5.7並行複製測試(r12筆記第9天)

MySQL 5.6, 5.7並行複製測試(r12筆記第9天)

對於主從延遲,其實一直以來就是一個頗有爭議的話題,在MySQL陣營中,如果容忍一定的延遲的場景,通過主從來達到讀寫分離是個很不錯的方案,但是延遲率到底有多高可以接受,新版本中的並行複製效果怎麼樣,在不同的版本中是否有改變,我們能否找到一些參考的資料來佐證,這一點上我們可以通過一些小測試來說明。

首先來為了基本按照同一個參考標準,我們就在同一臺伺服器上安裝了5.6,5.7的MySQL服務,另外一臺伺服器上搭建了從庫。

資料庫版本為5.6.23 Percona分支, 5.7.17 MySQL官方版本

伺服器上安裝了pt工具用來檢測主從延遲,安裝了新版本的sysbench來做加壓測試。

主庫: 10.127.128.227 RHEL6U3 32G R710 從庫: 10.127.128.78 RHEL6U3 32G R710

為了基本能夠達到同一個基準啦進行測試,我先啟動5.6的資料庫服務,測試完畢,啟動5.7的服務。避免多例項的並行干擾。

初始化資料採用了類似下面的指令碼,5.6, 5.7版本中都差不多。

建立了10個表,然後插入了500萬資料來測試。

sysbench /home/sysbench/sysbench-1.0.3/src/lua/oltp_read_write.lua --mysql-user=root --mysql-port=3308 --mysql-socket=/home/mysql_5.7.17/mysql.sock --mysql-host=localhost --mysql-db=sysbenchtest --tables=10 --table-size=5000000 --threads=50 prepare

加壓測試使用如下的sysbench指令碼,持續時間300秒

sysbench /home/sysbench/sysbench-1.0.3/src/lua/oltp_read_write.lua --mysql-user=root --mysql-port=3308 --mysql-socket=/home/mysql_5.7.17/mysql.sock --mysql-host=localhost --mysql-db=sysbenchtest --tables=10 --table-size=5000000 --threads=50 --report-interval=5 --time=300 run

檢視主從延遲,使用pt-heartbeat來完成。

開啟後臺任務:

pt-heartbeat h='10.127.128.78',u='pt_checksum',p='pt_checksum',P=3307 -D sysbenchtest --create-table --interval=1 --update --replace --daemonize

開啟主從延遲檢測:

pt-heartbeat h='10.127.128.78',u='pt_checksum',p='pt_checksum',P=3308 -D sysbenchtest --table=heartbeat --monitor --master-server-id=3308 --frames=5s --interval=5

因為主從複製在5.6, 5.7還是存在一定的差別,我們就分別測試單執行緒和多執行緒複製的差別和改進點。

並行複製的基本配置

5.6 開啟並行複製

mysql>stop slave; mysql>set global slave_parallel_workers=8; mysql>start slave;

5.7 開啟並行複製

其中值得一提的是5.7做了一些改進,slave-parallel-type有如下的兩個可選值 -- DATABASE -- 基於庫級別的並行複製 與5.6相同 -- LOGICAL_CLOCK -- 邏輯時鐘,主上怎麼並行執行的,從上也是怎麼並行回放的。所以我們開啟了logical_clock.

mysql> stop slave; mysql> set global slave_parallel_type='LOGICAL_CLOCK'; mysql> set global slave_parallel_workers=8; mysql> stop slave;

並行複製的效果對比圖

以下是得到的一個概覽圖,橫軸是測試時間,縱軸是延遲時間。

總體來看,MySQL 5.6中的並行複製效率提升不夠明顯,5.7中的提升效果非常顯著。