一個高效能MySQL proxy(kingshard)的效能測試報告

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

kingshard的效能測試報告

之前的幾篇blog,給大家分享的都是kingshard(https://github.com/flike/kingshard )的架構與設計。其實很多人對kingshard的效能也非常關心。最近熱心的網友bigpyer對kingshard做了詳細的效能測試。在此分享一下。

1.測試環境

1.1伺服器配置

類別 名稱
OS 雲主機 Ubuntu 14.04 LTS
CPU Common KVM CPU @ 2.40GHz *4
RAM 8GB
DISK 500GB
kingshard master分支
Mysql v5.6.25
Sysbench v0.5

2.效能需求

  1. 測試通過kingshard轉寄SQL請求與直連DB發送SQL請求這兩種情形下的效能差距。

  2. 測試組態檔案中max_conns_limit參數對kingshard的影響,並找出最優值。

3.測試準備工作

3.1 kingshard效能測試環境搭建

利用上述配置的4台伺服器搭建了一個kingshard效能測試環境:

  • 伺服器A運行著sysbench

  • 伺服器B運行著kingshard系統

  • 伺服器C運行著主庫

  • 伺服器D運行著從庫

四台伺服器處在同一個網段中。具體的拓撲圖如下所示:

有關kingshard系統安裝與配置,請參考文檔安裝kingshard。
有關sysbench v0.5的安裝與命令選項,請參考sysbench。

4.測試過程

執行下面的命令準備測試資料

time sysbench --test=/data/home/test_user/software/sysbench/sysbench/tests/db/oltp.lua \              --mysql-host=host \              --mysql-port=9696 \              --mysql-user=kingshard \              --mysql-password=kingshard \              --mysql-db=kingshard \              --oltp-tables-count=1 \              --oltp-table-size=1000000 \              --num-threads=50 \              --max-requests=1000000 \              --report-interval=1 \              prepare

上述命令會建立表sbtest1,資料量為100w,建表語句如下:

CREATE TABLE `sbtest1` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `k` int(10) unsigned NOT NULL DEFAULT '0',  `c` char(120) NOT NULL DEFAULT '',  `pad` char(60) NOT NULL DEFAULT '',  KEY `xid` (`id`),  KEY `k_1` (`k`)) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8 MAX_ROWS=1000000;

4.1 kingshard與直連DB效能比較

利用sysbench測試通過kingshard轉寄SQL請求和直連DB發送SQL請求這兩種情況下,kingshard和Mysql系統的兩項資料指標:QPS和每條SQL請求平均處理時間
通過sysbench發送四類SQL請求:select、update、insert和delete,情境分別為唯讀、讀寫4比1和唯寫。

4.1.1 kingshard與直連DB唯讀比較

通過修改host、port執行下面的命令分別測試kingshard轉寄SQL或直連DB:

time sysbench --test=/data/home/test_user/software/sysbench/sysbench/tests/db/select.lua \              --mysql-host=host \              --mysql-port=9696 \              --mysql-user=kingshard \              --mysql-password=kingshard \              --mysql-db=kingshard \              --oltp-tables-count=1 \              --oltp-table-size=1000000 \              --num-threads=16 \              --max-requests=1000000 \              --report-interval=1 \              --max-time=20 \              run

利用sysbench測試了並發線程個數不同的情況下,分別執行最大請求次數為100w的 select操作,通過修改--num-threads可以獲得不同並發線程數。
測試連接 kingshard 和直連 DB 這兩種情況下的 QPS(QPS越大,系統效能越好),
測試連接 kingshard 和直連 DB 這兩種情況下的 執行sql平均時延(時延越小,系統效能越好),
每組資料重複測試三次後取平均值,具體資料對比如下表所示:

上表對應的QPS折線圖如下所示:

上表對應的時延折線圖如下所示:

4.1.2 kingshard與直連DB讀寫4:1比較

通過修改host、port執行下面的命令分別測試kingshard轉寄SQL或直連DB:

ysbench --test=/data/home/test_user/software/sysbench/sysbench/tests/db/oltp.lua \              --mysql-host=host \              --mysql-port=3306 \              --mysql-user=kingshard \              --mysql-password=ks \              --mysql-db=kingshard \              --oltp-tables-count=1 \              --oltp-table-size=1000000 \              --num-threads=16 \              --max-requests=1000000 \              --report-interval=1 \              --max-time=20 \              run

利用sysbench測試了並發線程個數不同的情況下,分別執行最大請求次數為100w的 select、update、insert、delete等混合操作,通過修改--num-threads可以獲得不同並發線程數。
測試連接 kingshard 和直連 DB 這兩種情況下的 QPS(QPS越大,系統效能越好),
測試連接 kingshard 和直連 DB 這兩種情況下的 執行sql平均時延(時延越小,系統效能越好),
每組資料重複測試三次後取平均值,具體資料對比如下表所示:

上表對應的QPS折線圖如下所示:

上表對應的時延折線圖如下所示:

4.1.3 kingshard與直連DB唯寫比較

通過修改host、port執行下面的命令分別測試kingshard轉寄SQL或直連DB:

time sysbench --test=/data/home/test_user/software/sysbench/sysbench/tests/db/insert.lua \              --mysql-host=host \              --mysql-port=3306 \              --mysql-user=kingshard \              --mysql-password=ks \              --mysql-db=kingshard \              --oltp-tables-count=1 \              --oltp-table-size=1000000 \              --num-threads=16 \              --max-requests=1000000 \              --report-interval=1 \              --max-time=20 \              run

利用sysbench測試了並發線程個數不同的情況下,分別執行最大請求次數為100w的insert操作,通過修改--num-threads可以獲得不同並發線程數。
測試連接 kingshard 和直連 DB 這兩種情況下的 QPS(QPS越大,系統效能越好),
測試連接 kingshard 和直連 DB 這兩種情況下的 執行sql平均時延(時延越小,系統效能越好),
每組資料重複測試三次後取平均值,具體資料對比如下表所示:

上表對應的QPS折線圖如下所示:

上表對應的時延折線圖如下所示:

**從QPS折線圖可以看出,當sysbench的並發測試線程較少時,串連kingshard和直連DB的QPS差距較大。
這主要是因為當sysbench並發線程少時,kingshard的效能沒有得到充分的發揮,
sysbench只有很少的線程向kingshard發送請求,此時網路延遲對QPS的影響是最主要的。**

**當sysbench的並發測試線程較大時,此時kingshard的效能就得到了充分的發揮,
QPS的對比是串連kingshard與直連DB效能對比的真實的反應,網路延遲對QPS的影響作用就顯得很小了。**

**從以上幾個表個的比例資料來看,通過kingshard轉寄select請求時的QPS是直連DB時80%左右,
而update和insert請求對應的QPS則更高一些,相當於直連DB時的85%左右,甚至在並發更高的情況下直連mysql的效能低於通過kingshards轉寄的效能。
由此看來利用kingshard轉寄SQL請求帶來的效能下降雖有下降,但完全可以接受,甚至高並發情境下kingshard的效能優於直連DB的效能。這也是得益於kingshard在高並發的時候,充分利用了串連池的作用,降低了高並髮帶來的競爭消耗。**

sysbench並發線程高於512的資料並沒有給出,因為直連DB已經不能正常完成測試,但是kingshard可以完成。

4.2 max_conns_limit參數對kingshard效能影響

max_conns_limit 是 kingshard 初始化時建立的與後端mysql長串連個數,這個值設定的不同對 kingshard 效能也有比較明顯的影響。
我們猜測max_conns_limit除了與kingshard所在主機CPU核心數有關外還與後端mysql能接納的串連數有關。
我們分別測試將 max_conns_limit 設定為16、32、64、128、256、512時,kingshard轉寄select,update和insert三類操作請求時的 QPS,
SQL的混合情況為讀寫4比1,且sysbench的不同sql分別處於不同的事務中,具體對比結果如下所述:

上數測試對應的QPS折線圖如下所示:

從kingshard處理三類SQL操作的QPS對比來看,將max_conns_limit參數設定為128左右較為合理, 高於128後通過提高max_conns_limit值並沒有顯著效果。

max_conns_limit參數值與kingshard所在主機核心數並沒有必然的聯絡,與後端mysql主機可承受串連數關係密切。

5.測試結論

本文主要測試了通過kingshard轉寄SQL請求與直連DB發送SQL請求這兩種情形下的效能差距,和max_conns_limit值對kingshard的效能影響。
ks的讀寫效能平均可以達到原生mysql效能的80%,一定條件下可以達到90%,隨著並發數的增加甚至能超越mysql本身。
ks可以對mysql形成保護,增加了ks後,db層對外表現出可以接收更高的並發數,且執行時間長短不同的sql使用各自的資源,形成了資源隔離,mysql不會出現效能毛刺。
綜合以上測試結果來看,kingshard效能表現較為優秀,並沒有明顯的效能下降。同時在測試中發現kingshard系統屬於CPU密集型任務,相對於磁碟IO和記憶體佔用率而言,kingshard對CPU消耗顯得最為明顯,所以建議在部署kingshard的時候需要優先考慮伺服器的CPU效能。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.