【MYSQL備庫恢復速度測試 半同步速度測試】

wei-xh發表於2014-12-11

測試工具:sysbench

測試伺服器:DL380 G7 2  master-slave模式

記憶體大小:主機記憶體32G ,INNODB POOL SIZE 20G

硬碟:2塊普通的HDD

CPU12物理core

raid卡寫cache開啟

mysql版本:5.6.19

 

測試結論:

1)MYSQL半同步複製可以一定程度解決多機資料一致性問題,效能要比非同步複製低很多。同樣的測試指令碼,非同步複製在TPS 10000的情況下,半同步複製只有3000

2)MYSQL的備機恢復能力非常弱,這是由於它的複製只能單執行緒,而主庫的交易卻是多執行緒併發的。如果想解決這個問題,可以考慮分庫,分庫後可以利用多執行緒。

 

 

測試場景一:一主一備,半同步複製下每秒的事務數

 

半同步複製介紹:

傳統的非同步複製方式,主庫把BINLOG日誌傳送給從庫,並不會等待從庫確認接受完畢,這意味著主伺服器DOWN機後,從機可能存在沒有主庫已經提交的BINLOG日誌。為了解決這個問題,MYSQL 5.5版本引入半同步複製模式,該模式可以確保從伺服器接受完主伺服器的BINLOG日誌並寫入到自己的RELAY LOG中,然後給主伺服器一個反饋,告訴對方已經接受完畢。此模式一定程度上可以確保資料庫切換後不丟失資料,但是影響效能。

 

涉及引數:

sync_binlog=1

innodb_flush_log_at_trx_commit=1

innodb_flush_method=O_DIRECT

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

rpl_semi_sync_slave_enabled=1

 

一個事務包含:(一個insert 3update 1delete)

 

測試指令碼:

sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=10000000 --oltp-distinct-ranges=0 --mysql-db=test --mysql-user=root --mysql-password=123456 --oltp-order-ranges=0 --oltp-range-size=100 --oltp-point-selects=0 --oltp-simple-ranges=0 --oltp-sum-ranges=0 --oltp-test-mode=complex --max-requests=2000000 --num-threads=25 --max-time=40 run

 

測試結果:

非同步複製情況下每秒10000以上的TPS

半同步複製情況下每秒接近3000的TPS,跟非同步複製的複製效率差距還是很大的。

如果網路異常,半同步複製會降級為非同步複製,待網路恢復後,自動升級為半同步模式。

如果採用雙master架構,兩臺主機均可以配置為半同步模式。

 

 

測試場景二:備庫的複製延遲

涉及引數:

slave_parallel_workers=4

 

測試結果:

主庫每秒37792DML操作,備庫每秒8745的複製速度。由於MYSQL的複製針對一個DB只能是單執行緒,因此複製速度非常慢。

如果主庫每秒的DML操作次數超過8000左右就會產生複製延遲。如果備庫本身還有提供外部業務查詢的話,可能會進一步拖慢備庫的複製速度。

如果系統分庫的話,就可以使用並行複製,每多一個複製執行緒,可以提升70%左右的複製速度。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-1364629/,如需轉載,請註明出處,否則將追究法律責任。

相關文章