天天看點

【工具】MySQL 壓測工具之mydbtest

一 前言

二 如何使用

2.1 随機資料生成器 

  我們在配置檔案中指定随機資料的類型,取值範圍 比如a int 10 30000 ,随機生成從10-30000的整數,注意 a 必須是where 條件中使用的值,比如where id=:a:,文法

varname VARTYPE minimum maximum

該工具支援7種類型

sequence 序列

int    : i_value int min max

char   : c_value char min_length max_length 

float  : f_value float min max

double : d_value double min max

date   : create_time date -10 10 會産生十天之前和十天之後的随機時間,格式如:2016-04-01

timestamp : 用法和date 一樣,其格式為 YYYY-MM-DD HH24:MI:SS

 該軟體支援在同一個配置檔案中使用多種字段類型。

 2.2 配置檔案

 配置檔案的格式如下

 option

   name yangyi_20160331 

   user username/password@hostname:port:database

   loop N 循環次數

   log   生成結果的log檔案,可以使用 %p 來為每個壓測程序指定一個log檔案

   wait N 每次循環執行完之後(并不是每個sql執行的間隔) 等待多久微妙。預設值是0。

   show N 每個多少秒顯示壓測的響應時間 預設是60s 

   tran [yes] 事務型,如果該參數設定為yes ,則 begin 裡面的 sql 都會在同一個事務中執行

   commit [N] 每隔多少次loop 執行一次commit指令。如果配置了大量的測試資料,建議将該值設定的大一點。需要注意的是 commit參數隻有在 tran 設定為yes 的時候 起作用。

   time  Specify how duration to be executed for the SQL statements, default value is

         3600 seconds, you can specify “d1” for one day, “h1” for on hour, “m1” for one minute, and “s60” for 60 seconds.

 declare  

   #随機數

   varname1 int 10 100000

   varname2 char 1 30

   [.......]

 begin

   ##可以配置select ,insert,update,delete 語句,也可以配置 使用 {} 包含的資料庫語句,每個語句必須使用分号“;”隔開。

   INSERT INTO <table name> (…) VALUES (:varname1, :varname2,…);

   SELECT * FROM <table name>   WHERE … > :varname1; 

    { begin 

       update t_kc_center set col2=col2 – 1 where col1 = :id;

       update t_kc_center set col2=col2 + 1 where col1 = :id + 1; 

       end; 

    }

 end

一個具體的例子:

test.cnf

#該配置檔案表示 連接配接到資料庫,執行2000次查詢.

option

 name mysql_test

 loop 2000

 user yang/[email protected]:3308:test 

declare

 a int 10 30000

begin

 select * from t_mytest where col1 = :a;

end 

三 具體使用 

root@rac3:~# >./mydbtest_linux64.bin   --help

MYDBTEST: MySQL Database Test Utility , Release 1.0.1

(@) Copyright Lou Fangxin (AnySQL.net) 2012 - 2013, all rights reserved.

Usage: mysqldbtest keyword=value [keyword=value [...]]

Valid Keywords:

   user    = username/password@tnsname for source and target.

   query   = test case file.

   degree  = parallel degree for multiple threads test

root@rac3:~# >./mydbtest_linux64.bin query=test.cnf  degree=1

2016-03-25 14:08:27 ======================== mysql_test ========================

2016-03-25 14:08:27 SQL01  exe=2000 fail=0 row=1105 ela=231 ms avg=115 us

2016-03-25 14:08:27 SQL01    1 ms  exec=    1996, ela=       225 ms, avg=     113 us, pct= 99, 99

2016-03-25 14:08:27 SQL01    2 ms  exec=       3, ela=         3 ms, avg=    1031 us, pct=  0, 99

2016-03-25 14:08:27 SQL01    3 ms  exec=       1, ela=         2 ms, avg=    2481 us, pct=  0,100

2016-03-25 14:08:27 Total  tran=2000=8333/s, qtps=2000=8333/s, ela=233 ms, avg=116 us

Summary: SQL01 exec=2000, rows=1105=55/e, avg=115 us

Summary: exec=2000/s, qtps=2000/s

壓測的時候,如果覺得這樣的報告不符合要求,可以配合 orzdba 來檢視資料庫的qps tps,并選取資料繪制成圖表。