• 简介:mysqlslap

        mysqlslap是MySQL5.1.4之后自带的基准测试工具,该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。

 

  • 常用选项:mysqlslap

(见文章最后 “帮助列表01”)

 

  • 测试案例:mysqlslap

说明:
测试的过程需要生成测试表,插入测试数据,这个mysqlslap可以自动生成,默认生成一个mysqlslap的schema,如果已经存在则先删除。可以用--only-print来打印实际的测试过程,整个测试完成后不会在数据库中留下痕迹。

1)  单用户自动生成查询1次

# mysqlslap --host=47.95.100.100 --port=3306 --user=root --password='sss' --auto-generate-sql
mysqlslap: [Warning] Using a password on the command line interface can be insecure.
Benchmark
    Average number of seconds to run all queries: 0.038 seconds
    Minimum number of seconds to run all queries: 0.038 seconds
    Maximum number of seconds to run all queries: 0.038 seconds
    Number of clients running queries: 1
    Average number of queries per client: 0

基准

运行所有查询的平均秒数:0.038秒

运行所有查询的最小秒数:0.038秒

运行所有查询的最大秒数:0.038秒

运行查询的客户机数量:1

每个客户端的平均查询数:0

2)  100用户(并发100) 1000次查询 

# mysqlslap --host=47.95.100.100 --port=3306 --user=root --password='sss' --auto-generate-sql --concurrency=100 --iterations=1 --auto-generate-sql-load-type=mixed --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=5000

 

3) 50用户(并发50) 生成int列数5个、char列数20个随机表

# mysqlslap --host=47.95.100.100 --port=3306 --user=root --password='sss' --concurrency=50  --number-int-cols=8 --number-char-cols=18 --auto-generate-sql 

–number-int-cols=8 指定生成8个 int 类型的列

–number-char-cols=18 指定生成18个 char 类型的列

 

4) 使用自己的测试库测试语句

//如果是只读查询语句可以用原表,如果是有写入语句的,建议复制个库出来测试写

-- 并发100 ,自定义查询语句

# mysqlslap --host=47.95.100.100 --port=3306 --user=root --password='sss' --concurrency=100  --create-schema=aaa --query="SELECT * FROM device_request_message_log;"

–create-schema 用来指定测试库名称

–query 是自定义的测试语句

 

5) 使用sql脚本测试

实际使用时,一般是测试多个复杂的语句,可以定义一个脚本文件,例如

echo "SELECT * FROM aaa;SELECT * FROM bbb;" > /tmp/sqltest.sql

把多个查询语句写入了一个 sql 文件,然后使用此文件执行测试

# mysqlslap --host=47.95.100.100 --port=3306 --user=root --password='sss' --concurrency=100  --create-schema=aaa --query="ontest.sql"  --delimiter=";"

–query 中指定了sql文件

–delimiter 说明sql文件中语句间的分隔符是什么

 

引用01:

单线程测试。测试做了什么。
# mysqlslap -a -uroot -p123456
多线程测试。使用–concurrency来模拟并发连接。
# mysqlslap -a -c 100 -uroot -p123456
迭代测试。用于需要多次执行测试得到平均值。
# mysqlslap -a -i 10 -uroot -p123456

# mysqlslap ---auto-generate-sql-add-autoincrement -a -uroot -p123456
# mysqlslap -a --auto-generate-sql-load-type=read -uroot -p123456
# mysqlslap -a --auto-generate-secondary-indexes=3 -uroot -p123456
# mysqlslap -a --auto-generate-sql-write-number=1000 -uroot -p123456
# mysqlslap --create-schema world -q "select count(*) from City" -uroot -p123456
# mysqlslap -a -e innodb -uroot -p123456
# mysqlslap -a --number-of-queries=10 -uroot -p123456

测试同时不同的存储引擎的性能进行对比:
# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --engine=myisam,innodb --debug-info -uroot -p123456

执行一次测试,分别50和100个并发,执行1000次总查询:
# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --debug-info -uroot -p123456

50和100个并发分别得到一次测试结果(Benchmark),并发数越多,执行完所有查询的时间越长。为了准确起见,可以多迭代测试几次:
# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --debug-info -uroot -p123456
帮助列表01

  -?, --help          Display this help and exit.
                      (显示帮助并退出)

  -a, --auto-generate-sql 
                      Generate SQL where not supplied by file or command line.
                     (自动生成sql语句)

  --auto-generate-sql-add-autoincrement 
                      Add an AUTO_INCREMENT column to auto-generated tables.
                     (将自动增量列添加到自动生成的表中)
                    
  --auto-generate-sql-execute-number=# 
                      Set this number to generate a set number of queries to run.
                      (设置此数字以生成一组要运行的查询)

  --auto-generate-sql-guid-primary 
                      Add GUID based primary keys to auto-generated tables.
                      (将基于guid的主键添加到自动生成的表中)

  --auto-generate-sql-load-type=name 
                      Specify test load type: mixed, update, write, key, or read; default is mixed.
                      (指定测试加载类型:mixed、update、write、key或read;默认为mixed)

  --auto-generate-sql-secondary-indexes=# 
                      Number of secondary indexes to add to auto-generated tables.
                      (要添加到自动生成的表中的辅助索引数)

  --auto-generate-sql-unique-query-number=# 
                      Number of unique queries to generate for automatic tests.
                      (为自动测试生成的唯一查询数)

  --auto-generate-sql-unique-write-number=# 
                      Number of unique queries to generate for auto-generate-sql-write-number.
                      (为自动生成SQL写入编号而要生成的唯一查询数)

  --auto-generate-sql-write-number=# 
                      Number of row inserts to perform for each thread (default is 100).
                      (每个线程执行的行插入数(默认值为100))

  --commit=#          Commit records every X number of statements.
                      (每隔x条语句提交一次记录)

  -C, --compress      Use compression in server/client protocol.
                      (在服务器/客户端协议中使用压缩)

  -c, --concurrency=name 
                      Number of clients to simulate for query to run.
                      (要模拟以运行查询的客户端数)

  --create=name       File or string to use create tables.
                      (创建文件或字符串的名称)

  --create-schema=name 
                      Schema to run tests in.
                      (指定测试库名称)

  -F, --delimiter=name 
                      Delimiter to use in SQL statements supplied in file or command line.
                      (要在文件或中提供的SQL语句中使用的分隔符命令行)

  -e, --engine=name   Storage engine to use for creating the table.
                      (选择查询引擎)

  -h, --host=name     Connect to host.
                      (主机ip/域名)

  -i, --iterations=#  Number of times to run the tests.
                      (运行测试的次数)

  --no-drop           Do not drop the schema after the test.
                     (不要在测试后删除架构)

  -x, --number-char-cols=name 
                      Number of VARCHAR columns to create in table ifspecifying --auto-generate-sql.
                      (要在表ifspecifying中创建的varchar列数--自动生成SQL)

  -y, --number-int-cols=name 
                      Number of INT columns to create in table if specifying --auto-generate-sql.
                      (要在表ifspecifying中创建的int列数--自动生成SQL)

  --number-of-queries=# 
                      Limit each client to this number of queries (this is not exact).
                      (将每个客户机限制为这个数量的查询(这不准确))

  --only-print        Do not connect to the databases, but instead print out
                      (不要连接到数据库,而是打印出来)

  -p, --password[=name] 
                      Password to use when connecting to server.
                     (连接服务器的密码)

  -P, --port=#        Port number to use for connection.
                      (连接服务器的端口)

  --protocol=name     The protocol to use for connection (tcp, socket, pipe, memory).
                      (用于连接的协议(TCP、套接字、管道、内存))

  -q, --query=name    Query to run or file containing query to run.
                      (要运行的查询或包含要运行的查询的文件)

  -s, --silent        Run program in silent mode - no output.
                      (以静默模式运行程序-无输出)

  -S, --socket=name   The socket file to use for connection.
                      (用于连接的套接字文件)

  -u, --user=name     User for login if not current user.
                      (连接服务器的登陆名)

  -V, --version       Output version information and exit.
                      (输出版本并退出)