服務器IO測試,及利用sysbench工具進行mysql oltp性能測試
公司打算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性能測試