天天看點

Mysql 性能測試工具 sysbench的安裝和使用

    工作上需要用到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&gt;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 &gt; /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,如需轉載請自行聯系原作者