Alan Hou的个人博客

MySQL基准测试

常见指标:
TPS(Transaction per Second)
QPS(Query per Second)
响应时间
并发量

步骤
计划和设计基准测试
准备基准测试及数据收集脚本

容易忽略的问题
使用生产环境数据时只使用了部分数据
在多用户场景中,只做单用户的测试
在单服务器上测试分布式应用
反复执行同一查询

mysqlslap

MySQL服务器自带的基准测试工具,随MySQL一起安装
常用参数:
–auto-generate-sql 由系统自动生成SQL脚本进行测试
–auto-generate-sql-add-autoincrement 在生成的表中增加自增ID
–auto-generate-sql-load-type 指定测试中使用的查询类型
–auto-generate-sql-write-number 指定初始化数据时生成的数据量
–concurrency 指定并发线程的数量
–engine 指定要测试表的存储引擎,可以用逗号分割多个存储引擎
–no-drop 指定不清理测试数据
–iterations 指定测试运行的次数
–number-of-queries 指定每一个线程执行的查询数量
–debug-info 指定输出额外的内存及CPU统计信息
–number-int-cols 指定测试表中饮食的INT类型列的数量
–number-char-cols 指定测试表中包含的varchar类型的数量
–create-schema 指定了用于执行测试的数据库的名字
–query 用于指定自定义SQL的脚本
–only-print 并不运行测试脚本,而是把生成的脚本打印出来

可输入mysqlslap –help查看所有参数

举例如下

mysqlslap --concurrency=1,50,100,200 --iterations=3 --number-int-cols=5 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-add-autoincrement --engine=myisam,innodb --number-of-queries=10 --create-schema=mytest

可通过在后面添加–only-print | more或导到一个文件中查看执行过程的代码。

备注:免用户密码登录mysql
打开/etc/my.cnf文件,添加

[client]
user=root
password=your_passwd

sysbench

安装方法

wget http://github.com/akopytov/sysbench/archive/0.5.zip
unzip 0.5.zip
cd sysbench-0.5
yum install unzip automake libtool -y
./autogen.sh
./configure --with-mysql-includes=/usr/include/mysql/ --with-mysql-libs=/usr/lib64/mysql/
make && make install

–with-mysql-includes和–with-mysql-libs取决于安装环境,通常自己编译的为:/usr/local/mysql/include和/usr/local/mysql/lib

安装完成后通过sysbench –help来验证一下

常用参数
–test 用于指定所要执行的测试类型,支持以下参数
fileio 文件系统I/O性能测试
cpu cpu性能测试
memory 内存性能测试
oltp 测试要指定具体的lua脚本, lua脚本位于/sysbench-0.5/sysbench/tests/db
–mysql-db 用于指定执行基准测试的数据库名
–mysql-table-engine 用于指定所使用的存储引擎
–oltp-tables-count 执行测试的表的数量
–oltp-table-size 指定每个表中的数据行数
–num-threads 指定测试的并发线程数量
–max-time 指定最大的测试时间
–report-interval 指定间隔多长时间输出一次统计信息
–mysql-user 执行测试的MySQL用户
–mysql-password 执行测试的MySQL用户的密码
prepare 用于准备测试数据
run 进行实际测试
cleanup 用于清理测试数据

CPU测试

sysbench --test=cpu --cpu-max-prime=10000 run

磁盘I/O测试

cd /tmp/
sysbench --test=fileio --file-total-size=1G prepare #生成文件大小要大于内存
sysbench --test=fileio --num-threads=8 --init-rng=on --file-total-size=1G --file-test-mode=rndrw --report-interval=1 run
sysbench --test=fileio --file-total-size=1G cleanup

MySQL数据库测试

创建测试数据库以及用户名密码

create database systest;
grant all privileges on systest.* to systest@localhost identified by '123456';
flush privileges;

进入sysbench-0.5/sysbench/tests/db/目录

#准备数据后再执行
sysbench --test=./oltp.lua --mysql-table-engine=innodb --oltp-table-size=10000 --mysql-db=systest --mysql-user=systest --mysql-password=123456 --oltp-tables-count=10 --mysql-socket=/var/lib/mysql/mysql.sock prepare

 

退出移动版