工作上需要用到AWS和Azure的Mysql服務,需要測試比較一下兩個雲服務的性能。于是開始百度 + google,查找性能測試工具。最終決定用sysbench。
sysbench介紹
安裝
1
2
3
<code>#wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip"</code>
<code>#unzip sysbench-1.0.zip</code>
<code>#cd sysbench-1.0</code>
2. 安裝依賴庫
<code>#yum install automake libtool -y</code>
3. 開始安裝
4
<code>#./autogen.sh</code>
<code>#./configure</code>
<code>#ERROR: cannot find MySQL libraries. If you want to compile with MySQL support 沒找到mysql庫 需要用參數指定下 --with-mysql-includes和--with-mysql-libs</code>
<code>#./configure --with-mysql-includes=/alidata/server/mysql5.7/include/ --with-mysql-libs=/alidata/server/mysql5.7/lib/</code>
4. 由于是yum安裝的mysql,我也不知道路徑在哪裡。如何查找mysql的安裝路徑?
安裝mysql-devel,才能使用mysql_config
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<code>#yum install -y mysql-devel</code>
<code>#mysql_config -help</code>
<code>Usage: /usr/bin/mysql_config-64 [OPTIONS]</code>
<code>Options:</code>
<code>--cflags [-I/usr/include/mysql -g -fstack-protector -m64 -fPIC -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing]</code>
<code>--cxxflags [-I/usr/include/mysql -g -fexceptions -fstack-protector -m64 -fPIC -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing]</code>
<code>--include [-I/usr/include/mysql]</code>
<code>--libs [-L/usr/lib64/mysql -lmysqlclient -lpthread -lm -lrt -ldl]</code>
<code>--libs_r [-L/usr/lib64/mysql -lmysqlclient -lpthread -lm -lrt -ldl]</code>
<code>--plugindir [/usr/lib64/mysql/plugin]</code>
<code>--socket [/var/lib/mysql/mysql.sock]</code>
<code>--port [0]</code>
<code>--version [5.6.39]</code>
<code>--libmysqld-libs [-L/usr/lib64/mysql -lmysqld -lpthread -lm -lrt -lcrypt -ldl -laio -lnuma]</code>
<code>--variable=VAR VAR is one of:</code>
<code>pkgincludedir [/usr/include/mysql]</code>
<code>pkglibdir [/usr/lib64/mysql]</code>
<code>plugindir [/usr/lib64/mysql/plugin]</code>
5. 再次執行config,成功
<code># ./configure --with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib64/mysql</code>
<code>#make</code>
6. 執行下指令:
<code>#sysbench --help</code>
<code>#sysbench: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory</code>
<code>#問題原因:sysbench無法找到mysql的庫檔案,可能是環境變量LD_LIBRARY_PATH沒有設定,設定後即可解決該問題:</code>
<code>#export LD_LIBRARY_PATH=/alidata/server/mysql5.7/lib/lib</code>
<code>#sysbench --version</code>
<code>sysbench 1.0.12 (</code><code>using</code> <code>bundled LuaJIT 2.1.0-beta2)</code>
準備測試表和資料
1. 建立測試資料庫:
<code>mysql>create database dbtest;</code>
2. 測試指令
<code>#/home/mysql/sysbench-1.0/src/sysbench --test=/home/mysql/sysbench-1.0/tests/include/oltp_legacy/oltp.lua \</code>
<code>--mysql-host=mysql-host-ip --mysql-port=3306 --mysql-user=envision --mysql-password=password \</code>
<code>--mysql-db=dbtest --oltp-tables-count=10 --oltp-table-size=500000 \</code>
<code>--report-interval=10 --</code><code>rand</code><code>-init=on --max-requests=0 \</code>
<code>--oltp-read-only=off --max-</code><code>time</code><code>=120 --num-threads=30 \</code>
<code>[ prepare | run | cleanup ]</code>
##三選一
prepare 準備;
run 運作;
cleanup 清理資料。
注意最後一行,一項測試開始前需要用prepare來準備好表和資料,run執行真正的壓測,cleanup用來清除資料和表。
3. 執行sysbench指令參數解釋:
<code>#-test=/root/sysbench-1.0/tests/include/oltp_legacy/oltp.lua 表示調用 oltp.lua 腳本進行 oltp 模式測試</code>
<code>#--oltp_tables_count=10 表示會生成 10 個測試表</code>
<code>#--oltp-table-size=500000 表示每個測試表填充資料量為 500000 </code>
<code>#--rand-init=on 表示每個測試表都是用随機資料來填充的</code>
<code>#-num-threads=8 表示發起 8個并發連接配接</code>
<code>#--oltp-read-only=off 表示不要進行隻讀測試,也就是會采用讀寫混合模式測試#--report-interval=10 表示每10秒輸出一次測試進度報告</code>
<code>#--rand-type=uniform 表示随機類型為固定模式,其他幾個可選随機模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托)</code>
<code>#--max-time=120 表示最大執行時長為 120秒#--max-requests=0 表示總請求數為 0,因為上面已經定義了總執行時長,是以總請求數可以設定為 0;也可以隻設定總請求數,不設定最大執行時長</code>
<code>#--percentile=99 表示設定采樣比例,預設是 95%,即丢棄1%的長請求,在剩餘的99%裡取最大值</code>
4. 測試準備: 30個并發連接配接,10張表 每個表填充50W條資料 最大請求時間120s
<code>prepare</code>
<code>Creating table </code><code>'sbtest1'</code><code>...</code>
<code>Inserting 100000 records into </code><code>'sbtest1'</code>
<code>Creating secondary indexes on </code><code>'sbtest1'</code><code>...</code>
<code>Creating table </code><code>'sbtest2'</code><code>...</code>
<code>Inserting 100000 records into </code><code>'sbtest2'</code>
<code>Creating secondary indexes on </code><code>'sbtest2'</code><code>...</code>
<code>......</code>
<code>Inserting 100000 records into </code><code>'sbtest9'</code>
<code>Creating secondary indexes on </code><code>'sbtest9'</code><code>...</code>
<code>Creating table </code><code>'sbtest10'</code><code>...</code>
<code>Inserting 100000 records into </code><code>'sbtest10'</code>
<code>Creating secondary indexes on </code><code>'sbtest10'</code><code>...</code>
5. 執行sysbench測試,并輸出測試報告
<code>--oltp-read-only=off --max-</code><code>time</code><code>=120 --num-threads=128 \</code>
<code>run > /tmp/liang/mysql-report.txt</code>
6. 檢視測試報告
30個threads
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<code>Running the test with following options:</code>
<code>Number of threads: 30</code>
<code>Report intermediate results every 10 second(s)</code>
<code>Initializing random number generator from current </code><code>time</code>
<code>Initializing worker threads...</code>
<code>Threads started!</code>
<code>[ 10s ] thds: 30 tps: 188.63 qps: 3795.16 (r/w/o: 2659.89/755.31/379.96) lat (ms,95%): 223.34 err/s: 0.00 reconn/s: 0.00</code>
<code>[ 20s ] thds: 30 tps: 177.80 qps: 3563.97 (r/w/o: 2496.95/711.31/355.71) lat (ms,95%): 248.83 err/s: 0.00 reconn/s: 0.00</code>
<code>[ 30s ] thds: 30 tps: 177.20 qps: 3542.62 (r/w/o: 2479.82/708.30/354.50) lat (ms,95%): 235.74 err/s: 0.00 reconn/s: 0.00</code>
<code>[ 40s ] thds: 30 tps: 189.60 qps: 3797.38 (r/w/o: 2658.99/759.20/379.20) lat (ms,95%): 227.40 err/s: 0.00 reconn/s: 0.00</code>
<code>[ 50s ] thds: 30 tps: 190.40 qps: 3798.09 (r/w/o: 2655.29/762.20/380.60) lat (ms,95%): 211.60 err/s: 0.00 reconn/s: 0.00</code>
<code>[ 60s ] thds: 30 tps: 179.70 qps: 3598.40 (r/w/o: 2520.50/718.40/359.50) lat (ms,95%): 235.74 err/s: 0.00 reconn/s: 0.00</code>
<code>[ 70s ] thds: 30 tps: 187.30 qps: 3740.91 (r/w/o: 2617.61/748.50/374.80) lat (ms,95%): 227.40 err/s: 0.00 reconn/s: 0.00</code>
<code>[ 80s ] thds: 30 tps: 187.40 qps: 3755.29 (r/w/o: 2630.19/750.40/374.70) lat (ms,95%): 211.60 err/s: 0.00 reconn/s: 0.00</code>
<code>[ 90s ] thds: 30 tps: 188.10 qps: 3762.11 (r/w/o: 2632.80/753.10/376.20) lat (ms,95%): 211.60 err/s: 0.00 reconn/s: 0.00</code>
<code>[ 100s ] thds: 30 tps: 183.70 qps: 3676.35 (r/w/o: 2575.16/733.69/367.49) lat (ms,95%): 227.40 err/s: 0.00 reconn/s: 0.00</code>
<code>[ 110s ] thds: 30 tps: 190.80 qps: 3816.33 (r/w/o: 2671.42/763.41/381.50) lat (ms,95%): 211.60 err/s: 0.00 reconn/s: 0.00</code>
<code>[ 120s ] thds: 30 tps: 195.49 qps: 3907.36 (r/w/o: 2733.40/783.17/390.79) lat (ms,95%): 204.11 err/s: 0.00 reconn/s: 0.00</code>
<code>SQL statistics:</code>
<code> </code><code>queries performed:</code>
<code> </code><code>read: 313488 --讀總數</code>
<code> </code><code>write: 89568 --寫總數</code>
<code> </code><code>other: 44784 --其他操作(CURD之外的操作,例如COMMIT)</code>
<code> </code><code>total: 447840 --全部總數</code>
<code> </code><code>transactions: 22392 (186.27 per sec.) --總事務數(每秒事務數)</code>
<code> </code><code>queries: 447840 (3725.43 per sec.) --總數(每秒總數)</code>
<code> </code><code>ignored errors: 0 (0.00 per sec.) --總忽略錯誤總數(每秒忽略錯誤次數)</code>
<code> </code><code>reconnects: 0 (0.00 per sec.) --重連總數(每秒重連次數)</code>
<code>General statistics:</code>
<code> </code><code>total </code><code>time</code><code>: 120.2098s --總耗時</code>
<code> </code><code>total number of events: 22392 --共發生多少事務數</code>
<code>Latency (ms):</code>
<code> </code><code>min: 105.91 --最小耗時</code>
<code> </code><code>avg: 160.86 --平均耗時</code>
<code> </code><code>max: 850.77 --最長耗時</code>
<code> </code><code>95th percentile: 223.34 --超過95%平均耗時</code>
<code> </code><code>sum: 3601892.56</code>
<code>Threads fairness:</code>
<code> </code><code>events (avg/stddev): 746.4000/4.95 --總處理事件數/标準偏差</code>
<code> </code><code>execution </code><code>time</code> <code>(avg/stddev): 120.0631/0.05--總執行時間/标準偏差</code>
經過測試,AWS和Azure的mysql性能相差無幾。sysbench的工具,使用起來也比較簡單直覺。适合對Mysql的簡單性能測試。後續有時間,再研究一下sysbench對CPU,IO等性能測試的情況和使用感受。
本文轉自 hsbxxl 51CTO部落格,原文連結:http://blog.51cto.com/hsbxxl/2068181,如需轉載請自行聯系原作者