首先介绍一下mysqlslap,mysqlslap是mysql自带的压力测试工具,从5.1.14版本以后产生。

mysqlslap的一些参数配置如下:

 --auto-generate-sql, -a 自动生成测试表和数据,表示用mysqlslap工具自己生成的SQL脚本来测试并发压力。
  --auto-generate-sql-load-type=type 测试语句的类型。代表要测试的环境是读操作还是写操作还是两者混合的。取值包括:read,key,write,update和mixed(默认)。
  --auto-generate-sql-add-auto-increment 代表对生成的表自动添加auto_increment列,从5.1.18版本开始支持。
  --number-char-cols=N, -x N 自动生成的测试表中包含多少个字符类型的列,默认1
  --number-int-cols=N, -y N 自动生成的测试表中包含多少个数字类型的列,默认1
  --number-of-queries=N 总的测试查询次数(并发客户数×每客户查询次数)
  --query=name,-q 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。
  --create-schema 代表自定义的测试库名称,测试的schema,MySQL中schema也就是database。
  --commint=N 多少条DML后提交一次。
  --compress, -C 如果服务器和客户端支持都压缩,则压缩信息传递。
  --concurrency=N, -c N 表示并发量,也就是模拟多少个客户端同时执行select。可指定多个值,以逗号或者--delimiter参数指定的值做为分隔符。例如:--concurrency=100,200,500。
  --engine=engine_name, -e engine_name 代表要测试的引擎,可以有多个,用分隔符隔开。例如:-  -engines=myisam,innodb。
  --iterations=N, -i N 测试执行的迭代次数,代表要在不同并发环境下,各自运行测试多少次。
  --only-print 只打印测试语句而不实际执行。
  --detach=N 执行N条语句后断开重连。

--debug-info, -T 打印内存和CPU的相关信息。

--create-schema 测试的schema,MySQL中schema也就是database。

测试实例

  • test1

mysql基于mysqlslap的压力测试_mysql

此例子测试了并发量为300,查询次数为1000时的查询时间;

  • test2

    为了得到我的电脑上mysql可以承受的并发极限,我试着不断的增加-c参数,即并发量,最后得到的结果是大概375-380并发量时,会报如下错误:

    mysql基于mysqlslap的压力测试_性能压力测试_02

关于为什么会是这么多,我现在还不很明白,正在研究。

  • test3

    mysql基于mysqlslap的压力测试_性能压力测试_03

当不断地增加查询次数即number-of-queries,当达到4600左右的时候,就会报以上错误,这又是一个待解决的问题

  • test4

    mysql基于mysqlslap的压力测试_性能压力测试_04

    mysql基于mysqlslap的压力测试_性能压力测试_05

    第四个测试实例比较了在相同并发量,相同查询次数的前提下,myisam与innodb存储引擎的不同表现,多次测试结果基本相同:MYISAM引擎的平均查询时间要比InnoDB低。但是目前InnoDB是主要选择对象,这是另外一个值得考虑的地方。

总之:此次测试本来紧紧是想看看自己的笔记本上的mysql的并发极限,不过测试结果也带给我不少的问题,我会继续研究,争取把问题弄明白。也希望能够大家不吝赐教。