TiDB 壓力測試報告

TiDB 壓力測試報告mysql

(轉載自公衆號DBATech)git

1、測試環境github

一、tidb 集羣架構:sql

測試使用最基本的TiDB架構。即 3個tidb-server節點+ 3個tikv節點 + 3個pd節點。數據庫

 

二、tidb集羣的部署環境(混合部署):緩存

192.168.xx.A 1*server +1*PD +1*tikv服務器

192.168.xx.B 1*server +1*PD +1*tikv網絡

192.168.xx.C 1*server +1*PD+1*tikv架構

IDC機器環境:併發

0S :CentOS7

CPU :Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz  *24

RAM :48GB

DISK :SSD, 480GB RAID0

 

TiDB 重要配置參數

如下這些參數都是會對tidb形成性能影響的參數。設置儘可能折中。較少對性能的影響。

tidb-server節點的設置:

[log]

level = "warn"

[prepared-plan-cache]

enabled = true

log-level = "warning"

[raftstore]

sync-log = false

 tikv節點的設置:

log-level = "warning"

[rocksdb.defaultcf]

[rocksdb.writecf]

block-cache-size = "6GB"    #關於寫的緩存塊大小  大概設置爲讀的1/3

max-background-jobs = 8  #後臺線程,用於壓縮數據與刷新數據

[raftstore]

sync-log = false

[storage.block-cache]

capacity = "20GB"   # 3.0以後 tikv的緩存,包括  rocksdb.defaultcf rocksdb.writecf  rocksdb.lockcf raftdb.defaultcf 都由改參數設置,緩存共享。

集羣正常啓動後,在每一個節點執行如下語句,關閉 失敗事務重試。

set global tidb_disable_txn_auto_retry = off

三、sysbench client:

6 臺機器 sysbench client (配置與tidb-server機器如出一轍)。每次測試6個機器同時發起6個sysbench進程。sysbech client 均勻鏈接到 3 tidb-server節點上(每2臺sysbench client 鏈接一個tidb-server節點)

因爲測試由6個機器併發發起,所以執行結果的 TPS QPS error  reconnects 是 6 個sysbench client 之和。min max 爲 6個節點的最小於最大值。avg 95th 爲6個節點值的平均值。

sysbench 壓測語句以下:

sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=xxxx --mysql-port=xxxx --mysql-user=xxxx --mysql-password=xxxx --mysql-db=sysbench --db-driver=mysql --tables=50 --table-size=10000000 --report-interval=1 --threads=[線程從2-24變化]  --rand-type=uniform   --time=300 --max-requests=0  run

說明:每一個sysbech client一次發起長達300秒測試。--max-requests=0 表示不限制測試達到的總qps。

測試數據準備:

sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=xxxx --mysql-port=xxxx --mysql-user=xxxx --mysql-password=xxxx --mysql-db=sysbench --db-driver=mysql --tables=50 --table-size=10000000 --report-interval=100 --threads=24  --rand-type=uniform   --time=0 --max-requests=0 prepare

數據量:50張表,每一個表1000萬數據。大約200GB數據。緩存參數capacity爲20GB。緩存與持久化數據比例 大約爲1:10

 

5 測試腳本:

本猿編寫一小py小腳本( https://github.com/jiasirVan/dbtool/blob/master/bench2.py ) 。

配置文件sysbench.cnf:

[mysql]

ip=192.168.xx.x

port=xxxx

user=xxxx

password=xxxx

dbname=sysbench

[sysbench]

#生成的表數量

table_amount=50

#限制總的執行時間(秒) 0表示不限制

exectime=300

#每一個表初始化多少行數據

rows=10000000

#請求的最大數目。默認爲1000000,0表明不限制

max_request=0

#每n秒輸出一次測試進度報告

interval=10

#指定sysbench的輸出日誌目錄

logdir=/tmp/log

##併發壓測的線程數

threadnumber=2,4,6,8,10,12,14,16,18,20,22,24

#指定用哪一個lua腳本測試

lua_script=/usr/share/sysbench/oltp_update_index.lua

 

執行腳本:./bench2.py  -c sysbench.cnf  -r -f  

測試結果直接格式化輸出,大約以下(每一行爲配置文件的一個threadnumber值,例如如下的2,4,6線程的輸出)。

輸出結果:

TPS    QPS    error/s    reconnects/s    min    avg    max    95th 

110.98    1775.60    0.00    0.00    10.95    18.02    164.74    23.10

250.54    4008.68    0.00    0.00    9.72    15.96    243.09    19.65

415.15    6642.39    0.00    0.00    9.04    14.45    281.74    18.28

 


 

2、sysbench測試說明:

sysbench mysql 的測試類型:

#1. bulk_insert.lua  批量寫入操做

#2. oltp_delete.lua 寫入和刪除並行操做

#3. oltp_insert.lua  純寫入操做

#4. oltp_point_select.lua  只讀操做,條件爲惟一索引列

#5. oltp_read_only.lua  只讀操做,包含聚合,去重等操做 大多數狀況用於統計的壓測

#6. oltp_read_write.lua 讀寫混合操做,最經常使用的腳本  用於oltp系統的壓測。

#7. oltp_update_index.lua 更新操做,經過主鍵進行更新

#8. oltp_update_non_index.lua 更新操做,不經過索引列

#9. oltp_write_only.lua 純寫操做,經常使用腳本,包括insert update delete

#10. select_random_points.lua 隨機集合只讀操做,經常使用腳本,彙集索引列的selete in操做

#11. select_random_ranges.lua 隨機範圍只讀操做,經常使用腳本,彙集索引列的selete between操做

注:由於sysbench測試客戶端機器與tidb服務器都在同機房。網絡ping延遲大約爲0.08ms 。能夠忽略不計。

 


三 、開始測試

 

說明:全部的tidb-server與 sysbench 測試機器在同機房,屢次ping 網絡延遲大約在0.08ms左右,能夠忽略不計。

 

一、惟一索引只讀壓測:

 

結論: 惟一索引讀是數據庫最高效的查詢操做。從上圖看,惟一索引select 的qps 在 client thread 併發達到 108 以後增加趨於平緩。大約qps在10萬左右。平均時延也相對較低。在1ms如下。越大的併發,平均qps時延增長。

 


 

二、只讀壓測(包括聚合,去重,關聯等複雜查詢

結論:以上是各種讀操做,包括 聚合,關聯,去重等複雜的select操做的壓測結果。比較符合分析系統型壓測。根據上圖壓測,QPS 在 client thread 108 以後增加趨於平緩。QPS 大約在55000左右。


 

三、讀寫混合測試(讀寫比例爲默認的7:3):

結論:讀寫混合壓測針對OLTP在線系統,壓測結果展現 ,大約在 client thread 爲108併發以後,QPS增加趨於平緩。在 40000左右。時延隨着併發數的增長不斷的增大。

 


四、總結:

經過以上壓測。架構爲 3 tikv + 3 tidb-server+ 3 pd 架構的tidb分佈式集羣 在給定環境的下性能表現很好。client thread 併發支持在108 線程達到最大。繼續增大併發,QPS 增加並不明顯,會增大操做時延。在讀寫混合型的oltp系統中,QPS 達到 40000萬左右。併發上比mysql更優,得益於tidb的分佈式架構。但對於單個簡單查詢語句,mysql的響應時間更快。在大部分OLTP 系統上,都是簡單select操做,tidb的響應時間在1毫秒一下。與mysql 相差不大。但 tidb 的分佈式架構 支持更好的橫向擴展。

相關文章
相關標籤/搜索