转自http://blog.sina.com.cn/s/blog_5aefd9770100aft8.html
工具运行分为4个步骤:
创建数据库和表
插入数据
执行查询更新等操作 query(测试的主要内容)以下称为查询
删除数据库
1.使用自动生成的脚本测试
mysqlslap --help可以查看具体的参数的用法
例子:mysqlslap --concurrency=50,100,200 --iterations=20 --number-int-cols=4 --number-char-cols=35 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=read --engine=myisam,innodb --number-of-queries=200 --verbose --socket=/usr/local/mysql1/var/mysql.sock -u root -p123
使用系统自带的脚本测试,增加auto_increment一列,int4列char35列,测试2种引擎myisam,innodb读的性能分别用50,100,200个客户端对服务器进行测试总共200个查询语句 执行20次查询
加个--only-print不连接数据库只打印要做什么
Benchmark
###### 50个并发客户端 平均每个客户端4个查询 20次查询中最少的时间是0.081秒、 最多1.239秒、平均0.897秒。
Benchmark
Benchmark
Benchmark
Benchmark
Benchmark
2.自定义脚本
mysqlslap --create=/root/Desktop/test.sql --query=/root/Desktop/test2.sql --concurrency=50,100,200 --iterations=20 --engine=myisam,innodb
/root/Desktop/test.sql
CREATE TABLE `t1` (id varchar(32) primary key,intcol1 INT(32) ,charcol1 VARCHAR(128));
INSERT INTO t1 VALUES (uuid(),1804289383,'mxvtvmC9127qJNm06sGB8R92
INSERT INTO t1 VALUES (uuid(),822890675,'97RGHZ65mNzkSrYT3zWoSbg9
INSERT INTO t1 VALUES (uuid(),1308044878,'50w46i58Giekxik0cYzfA8BZ
INSERT INTO t1 VALUES (uuid(),964445884,'DPh7kD1E6f4MMQk1ioopsoII
INSERT INTO t1 VALUES (uuid(),1586903190,'lwRHuWm4HE8leYmg66uGYIp6
INSERT INTO t1 VALUES (uuid(),962033002,'rfw4egILWisfxPwOc3nJx4fr
INSERT INTO t1 VALUES (uuid(),1910858270,'ksnug3YyANnWWDEJiRkiFC4a
INSERT INTO t1 VALUES (uuid(),63299708,'FJid3GaHpRC2L6jgirPm5AW3
INSERT INTO t1 VALUES (uuid(),737703662,'2zxutF6rOqjXYHHzSrKRwAhW
/root/Desktop/test2.sql
SELECT intcol1,charcol1 FROM t1;
SELECT intcol1,charcol1 FROM t1;
SELECT intcol1,charcol1 FROM t1;
SELECT intcol1,charcol1 FROM t1;
SELECT intcol1,charcol1 FROM t1;
SELECT intcol1,charcol1 FROM t1;
SELECT intcol1,charcol1 FROM t1;
SELECT intcol1,charcol1 FROM t1;
SELECT intcol1,charcol1 FROM t1;
SELECT intcol1,charcol1 FROM t1;
Benchmark
Benchmark
Benchmark
Benchmark
Benchmark
Benchmark
--auto-generate-sql
当没有提供脚本的时候用系统自动生成的SQL脚本
--auto-generate-sql-add-autoincrement
增加auto_increment一列
--auto-generate-sql-execute-number=N
自动生成的查询的个数
--auto-generate-sql-guid-primary
增加GUID-based主键
--auto-generate-sql-load-type=type
read
write
key
update
mixed
--auto-generate-sql-secondary-indexes=N
增加二级索引的个数 默认是0
--auto-generate-sql-unique-query-number=N
不同的查询数量 默认值是10
--auto-generate-sql-write-number=N
每个线程执行多少行插入默认是100
--auto-generate-sql-unique-write-number=N
--commit=N
提交之前执行N个语句 默认是0
--compress
压缩所有客户端和服务器之间传送的信息
--concurrency=N
N个客户端执行查询语句,并发的数量
--create=value
用来创建表的语句的文件或者字符串
--create-schema=value
用来测试的数据库名 默认是mysqlslap
--csv
用逗号隔开格式的输出结果
--debug-info
打印内存和CPU信息
--delimiter
文件中的SQL语句使用分割符号
--detach=N
每N个语句断开在打开连接
--engine
表所使用的引擎,多个时用逗号隔开
--iterations
测试的次数
--number-char-cols=N
varchar列的个数
--number-int-cols=N
int列的个数 --auto-generate-sql
--number-of-queries=N
限制每个客户端查询的次数
--only-print
不连接数据库只打印要做什么
--host
--password
--pipe
--port
--protocol
--socket
--user
这些参数都是连接参数使用
--post-query=value
测试完成以后执行的SQL语句的文件或者字符串 这个过程不影响时间计算
--post-system=str
测试完成以后执行的系统语句 这个过程不影响时间计算
--pre-query
测试执行之前执行的SQL语句的文件或者字符串 这个过程不影响时间计算
--pre-system
测试执行之前执行的系统语句 这个过程不影响时间计算
--silent
不输出
--verbose
输出更多的信息
更多的参数可以参考http://dev.mysql.com/doc/refman/5.1/en/mysqlslap.html#option_mysqlslap_number-of-queries
总结:经过测试得出如下结论
对于工具评价:工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据。而且提供了多种引擎的比较。