转自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
        Running for engine myisam
        Average number of seconds to run all queries: 0.897 seconds
        Minimum number of seconds to run all queries: 0.081 seconds
        Maximum number of seconds to run all queries: 1.239 seconds
        Number of clients running queries: 50
        Average number of queries per client: 4
###### 50个并发客户端 平均每个客户端4个查询 20次查询中最少的时间是0.081秒、 最多1.239秒、平均0.897秒。
Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 1.544 seconds
        Minimum number of seconds to run all queries: 0.000 seconds
        Maximum number of seconds to run all queries: 4.174 seconds
        Number of clients running queries: 100
        Average number of queries per client: 2

Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 1.671 seconds
        Minimum number of seconds to run all queries: 0.005 seconds
        Maximum number of seconds to run all queries: 5.724 seconds
        Number of clients running queries: 200
        Average number of queries per client: 1

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 1.074 seconds
        Minimum number of seconds to run all queries: 0.000 seconds
        Maximum number of seconds to run all queries: 1.994 seconds
        Number of clients running queries: 50
        Average number of queries per client: 4

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 1.088 seconds
        Minimum number of seconds to run all queries: 0.000 seconds
        Maximum number of seconds to run all queries: 1.793 seconds
        Number of clients running queries: 100
        Average number of queries per client: 2

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 1.415 seconds
        Minimum number of seconds to run all queries: 0.006 seconds
        Maximum number of seconds to run all queries: 2.212 seconds
        Number of clients running queries: 200
        Average number of queries per client: 1


2.自定义脚本

mysqlslap --create=/root/Desktop/test.sql --query=/root/Desktop/test2.sql --concurrency=50,100,200 --iterations=20 --engine=myisam,innodb  --socket=/usr/local/mysql1/var/mysql.sock -u root -p123

/root/Desktop/test.sql
CREATE TABLE `t1` (id varchar(32) primary key,intcol1 INT(32) ,charcol1 VARCHAR(128));
INSERT INTO t1 VALUES (uuid(),1804289383,'mxvtvmC9127qJNm06sGB8R92q2j7vTiiITRDGXM9ZLzkdekbWtmXKwZ2qG1llkRw5m9DHOFilEREk3q7oce8O3BEJC0woJsm6uzFAEynLH2xCsw1KQ1lT4zg9rdxBL');
INSERT INTO t1 VALUES (uuid(),822890675,'97RGHZ65mNzkSrYT3zWoSbg9cNePQr1bzSk81qDgE4Oanw3rnPfGsBHSbnu1evTdFDe83ro9w4jjteQg4yoo9xHck3WNqzs54W5zEm92ikdRF48B2oz3m8gMBAl11W');
INSERT INTO t1 VALUES (uuid(),1308044878,'50w46i58Giekxik0cYzfA8BZBLADEg3JhzGfZDoqvQQk0Akcic7lcJInYSsf9wqin6LDC1vzJLkJXKn5onqOy04MTw1WksCYqPl2Jg2eteqOqTLfGCvE4zTZwWvgMz');
INSERT INTO t1 VALUES (uuid(),964445884,'DPh7kD1E6f4MMQk1ioopsoIIcoD83DD8Wu7689K6oHTAjD3Hts6lYGv8x9G0EL0k87q8G2ExJjz2o3KhnIJBbEJYFROTpO5pNvxgyBT9nSCbNO9AiKL9QYhi0x3hL9');
INSERT INTO t1 VALUES (uuid(),1586903190,'lwRHuWm4HE8leYmg66uGYIp6AnAr0BDd7YmuvYqCfqp9EbhKZRSymA4wx6gpHlJHI53DetH9j7Ixar90Jey5outd1ZIAJdJTjMaD7rMiqYXHFhHaB7Xr1HKuqe51GG');
INSERT INTO t1 VALUES (uuid(),962033002,'rfw4egILWisfxPwOc3nJx4frnAwgI539kr5EXFbupSZelM2MHqZEmD6ZNuEZzHib8fqYuHQbdrDND8lXqIdcNbAeWOBLZlpZOX5AoNlQFzpK7QjxcLP0wbWIriYGJL');
INSERT INTO t1 VALUES (uuid(),1910858270,'ksnug3YyANnWWDEJiRkiFC4a3e6KyJ2i3hSjksiuFLHlRXw9yhjDtnfoQd0OouyrcIbCB9zQWG4pf0yTZhaIT67nj7BY21FWJqaWrZxEh13Kt2hRbGl4MsrxsuLmvd');
INSERT INTO t1 VALUES (uuid(),63299708,'FJid3GaHpRC2L6jgirPm5AW3uGGgCloJ5Ww0eNHSiLWvS5bAxto23AxxR6TXr9qofeoAtxWcJsXnxzxmsdhvoekFc5mSES8tyxvsuPK5Hjs7ihtaJaLz5xEh2s1GCA');
INSERT INTO t1 VALUES (uuid(),737703662,'2zxutF6rOqjXYHHzSrKRwAhWCPXTdhNXYKQIRO9sEkFf1YeTGqw40Ta5u6QNfpvC1DWTTXDkFSFHtte9bbDSwgZjmryHglLhqjAKEF4MkJfT49eXcjzZNOG1F6BnsY');
/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
        Running for engine myisam
        Average number of seconds to run all queries: 0.128 seconds
        Minimum number of seconds to run all queries: 0.004 seconds
        Maximum number of seconds to run all queries: 0.167 seconds
        Number of clients running queries: 50
        Average number of queries per client: 10

Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 0.226 seconds
        Minimum number of seconds to run all queries: 0.164 seconds
        Maximum number of seconds to run all queries: 0.258 seconds
        Number of clients running queries: 100
        Average number of queries per client: 10

Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 0.360 seconds
        Minimum number of seconds to run all queries: 0.340 seconds
        Maximum number of seconds to run all queries: 0.411 seconds
        Number of clients running queries: 200
        Average number of queries per client: 10

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 0.161 seconds
        Minimum number of seconds to run all queries: 0.142 seconds
        Maximum number of seconds to run all queries: 0.216 seconds
        Number of clients running queries: 50
        Average number of queries per client: 10

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 0.275 seconds
        Minimum number of seconds to run all queries: 0.180 seconds
        Maximum number of seconds to run all queries: 0.371 seconds
        Number of clients running queries: 100
        Average number of queries per client: 10

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 0.428 seconds
        Minimum number of seconds to run all queries: 0.369 seconds
        Maximum number of seconds to run all queries: 0.601 seconds
        Number of clients running queries: 200
        Average number of queries per client: 10




--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

 对--auto-generate-sql-write-number执行N个不同的插入语句默认是10

--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列的个数  --auto-generate-sql

--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


总结:经过测试得出如下结论
对于工具评价:工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据。而且提供了多种引擎的比较。