1. 程式人生 > >服務器IO測試,及利用sysbench工具進行mysql oltp性能測試

服務器IO測試,及利用sysbench工具進行mysql oltp性能測試

io測試 sysbench

背景

公司打算2018年有把服務遷移到雲上的計劃,於是選擇了市場上的幾款雲產品來進行比較,其中對磁盤IO與mysql讀寫性能的測試是很重要的一個環節。故此,針對雲產品的磁盤IO以及雲數據庫的讀寫,進行了一些粗略的測試。

這裏測試的服務器來自騰訊雲,這裏暫且不討論雲的性能如何,只針對測試的方法來進行講訴。


sysbench工具

測試連續IO,我們可以利用linux的dd命令,但是如何測試隨機IO呢?sysbench就是一個用於測試隨機IO的很好選擇。


安裝sysbench:

項目地址:https://github.com/akopytov/sysbench

下載項目到本地,解壓:
# unzip master.zip
# cd sysbench-master/
# ./autogen.sh

編譯參數中指定mysql相關目錄
# ./configure --prefix=/usr/local/sysbench --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
# echo  '/usr/local/mysql/lib/' >> /etc/ld.so.conf
# ldconfig



安裝完sysbench之後,就可以進行IO的測試了,這裏測試的磁盤,都是騰訊雲的SSD數據盤:



連續IO測試(dd)

測試方法:

數據盤(寫):# dd if=/dev/zero of=/opt/data/test.iso bs=1024M count=5 conv=fdatasync

數據盤(讀):# dd if=/opt/data/test.iso of=/dev/zero bs=1024M count=5 iflag=direct



隨機IO測試(sysbench)

測試方法:

數據盤:

# cd /opt/data/

# sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw prepare



Mysql oltp基準測試

利用項目中的oltp.lua文件來準備測試所需要的數據:


# cd /usr/local/src/sysbench-master/tests/include/oltp_legacy/
# sysbench --mysql-host=xx.xx.xx.xx --mysql-port=3306 --mysql-user=root --mysql-password=xxxxxxx --test=oltp.lua --oltp_tables_count=10 --oltp-table-size=1000000 --rand-init=on --db-driver=mysql prepare

--test=oltp.lua 表示調用當前目錄下oltp.lua 腳本進行 oltp 模式測試

--oltp_tables_count=10 表示會生成 10 個測試表

--oltp-table-size=100000 表示每個測試表填充數據量為 100000

--rand-init=on 表示每個測試表都是用隨機數據來填充的

--db-driver=mysql 代表使用mysql驅動連接數據庫

技術分享圖片

技術分享圖片

開始測試:

# sysbench --mysql-host=xx.xx.xx.xx --mysql-port=3306 --mysql-user=root --mysql-password=xxxxxxx --test=oltp.lua --oltp_tables_count=10 --oltp-table-size=100000 --threads=8 --oltp-read-only=off --report-interval=10 --rand-type=uniform  --time=3600 --max-requests=0 --percentile=99 --db-driver=mysql  run

--num-threads=8 表示發起 8個並發連接

--oltp-read-only=off 表示不要進行只讀測試,也就是會采用讀寫混合模式測試

--report-interval=10 表示每10秒輸出一次測試進度報告

--rand-type=uniform 表示隨機類型為固定模式,其他幾個可選隨機模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托)

--time=3600 表示最大執行時長為 1個小時

--max-requests=0 表示總請求數為 0,因為上面已經定義了總執行時長,所以總請求數可以設定為 0;也可以只設定總請求數,不設定最大執行時長

--percentile=99 表示設定采樣比例,默認是 95%,即丟棄1%的長請求,在剩余的99%裏取最大值


測試結果:

技術分享圖片

可以看到相關的測試結果:

Mysql-tps:926.04/S

Mysql-qps:18520.74/s


刪除測試數據:

# sysbench -mysql-host=xx.xx.xx.xx --mysql-port=3306 --mysql-user=root --mysql-password=xxxxxx  --test=oltp.lua --oltp_tables_count=10 --oltp-table-size=100000 --threads=8 --oltp-read-only=off --report-interval=10 --rand-type=uniform  --time=3600 --max-requests=0 --percentile=99 --db-driver=mysql cleanup


服務器IO測試,及利用sysbench工具進行mysql oltp性能測試