MySQL从5.1.4版开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问mysql来执行测试,使用起来非常的简单。通过mysqlslap --help可以获得可用的选项,这里列一些主要的参数,更详细的说明参考官方手册。
对于压力测试讲,对应mysqlslap主要参数为:
--concurrency,-c,并发数(--concurrency=10,如果需要多种情况可以写为--concurrency=10,50,100)
--engines,引擎(--engines=ISAM,如果要测试多种引擎可以写用--engines=ISAM,HEAP,MyISAM)
注 --concurrency和 --engines同时使用,如--concurrency=10,50,100 --engines=ISAM,HEAP,MyISAM就会生成9组测试数据,确实很方便。
--iterations,-i,迭代的实验次数,主要作用是为了提高准确性
sql语句及构造:
--create-schema,指定需要测试的数据库(--create-schema='abbottd_9wiz_test')
注 每次测试时都要带上数据库的连接 -uroot -p1111
--auto-generate-sql,-a ,自动生成测试表和数据
--auto-generate-sql-load-type=type,测试语句的类型。取值包括read,key,write,update和mixed(默认)
--number-char-cols=N,-x N,自动生成的测试表中包含多个字符类型的列,默认是1
--number-int-cols=N,-y N,自动生成的测试表中包含多个数字类型的列,默认是1
--auto-generate-sql-add-autoincrement=N,代表对生成的表自动添加auto_increment列,从5.1.18版本开始
--query='sql',-q,使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。
--commit=N,多少条DML后提交一次
--commpress,-C,如果服务器和客户端支持压缩,则压缩信息传递
--detach=N,执行N条语句后断开重连
--number-of-queries=N,总的测试查询次数
注 例如--concurrency=100 --number-of-queries=1000 结果为每个用户查询10次所用的时间和
信息打印:
--debug-info,-T,打印内存和cpu信息
system time:在内核态下花费的时间
user time:在用户态花费的时间
max resident size:占用的最大物理内存(驻留内存)
Non-physical pagefaults:直接通过回收脏页来解决IO读写而产生的缺页中断的次数
involuntary context switch:线程因为时间片到了或更高优先级的线程抢占导致的切换的次数
voluntary context switch:线程主动让出处理器导致的切换的次数,很可能是等待IO
--only-print,只打印测试语句而不实际执行
自动构造sql测试:
测试的过程需要生成测试表,插入测试数据,这个mysqlslap可以自动生成,默认生成一个mysqlslap的schema,这里要注意了自动生成时千万不要再使用–create-schema指定已经存在的库,否则后果可能很严重。可以用–only-print来打印实际的测试过 程
shell> msyqlslap -a --only-print
CREATE TABLE `t1` (intcol1 INT(32) ,charcol1 VARCHAR(128));
INSERT INTO t1 VALUES (1804289383,'mxvtvmC9127qJNm06sGB8R92q2j7vTiiITRDGXM9ZLzkdekbWtmXKwZ2qG1llkRw5m9DHOFilEREk3q7oce8O3BEJC0woJsm6uzFAEynLH2xCsw1KQ1lT4zg9rdxBL');
.........................................................................................生成了很多条记录 DROP SCHEMA IF EXISTS `mysqlslap`;
如果我们使用msyqlslap -a --only-print -–create-schema='abbottd_9wiz_test' 这样我们的abbottd_9wiz_test库就直接被删除了,所以说后果很严重。
自定义sql测试:
[abbottd@dev ~]$ mysqlslap -c 5,20,50 -i 10 --query='select * from invoice_vbv' --create-schema='abbottd_9wiz_test' -u9wiz_test -p21w9 --dubug-info
Benchmark
Average number of seconds to run all queries: 0.839 seconds
Minimum number of seconds to run all queries: 0.690 seconds
Maximum number of seconds to run all queries: 0.996 seconds
Number of clients running queries: 5
Average number of queries per client: 1on
Benchmark
Average number of seconds to run all queries: 2.109 seconds
Minimum number of seconds to run all queries: 1.910 seconds
Maximum number of seconds to run all queries: 3.403 seconds
Number of clients running queries: 20
Average number of queries per client: 1
Benchmark
Average number of seconds to run all queries: 6.277 seconds
Minimum number of seconds to run all queries: 5.398 seconds
Maximum number of seconds to run all queries: 9.661 seconds
Number of clients running queries: 50
Average number of queries per client: 1
User time 176.46, System time 166.98
Maximum resident set size 6786812, Integral resident set size 0
Non-physical pagefaults 26785899, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 9111777, Involuntary context switches 19857
上面是进行对abbottd_9wiz_test表中invoice_vbv表的查询,分别在迸发2、20、50情况下跌代10次的情况。