一、软件简介
SysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。它主要包括以下几种方式的测试:
cpu性能,磁盘io性能,调度程序性能,内存分配及传输速度,POSIX线程性能,数据库性能(OLTP基准测试) 。
目前sysbench主要支持 MySQL,pgsql,oracle 这3种数据库。
二、环境准备
2.1 服务器准备
序号 | 服务器类型 | CPU | 内存 | IP地址 | 系统环境 |
---|---|---|---|---|---|
1 | CentOS 7 | 四核 | 4G | 192.168.61.65 | MySQL 5.7 |
2.2 Sysbench文件下载
下载地址:https://github.com/akopytov/sysbench/tags
2.3 下载文件上传到指定文件并解压
# 解压文件
tar -zxvf sysbench-1.0.20.tar.gz
# 移动文件到home文件下
mv sysbench-1.0.20 /home/
三、Sysbench安装
3.1 安装依赖库
yum install automake libtool -y
3.2 开始安装
[root@localhost sysbench-1.0.20]# ./autogen.sh
[root@localhost sysbench-1.0.20]# ./configure
#ERROR: cannot find MySQL libraries. If you want to compile with MySQL support 没找到mysql库 需要用参数指定下 --with-mysql-includes和--with-mysql-libs
测试主机MySQL通过yum安装,以下为安装后的默认配置路径:
配置文件:/etc/my.cnf
日志文件:/var/log//var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid
- (数据库目录
/var/lib/mysql/- 配置文件
/usr/share /mysql(mysql.server命令及配置文件)- 相关命令
/usr/bin(mysqladmin mysqldump等命令)- 启动脚本
/etc/rc.d/init.d/(启动脚本文件mysql的目录)
# 配置MySQL incluldes与libs
[root@localhost sysbench-1.0.20]# ./configure --with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib64/mysql
[root@localhost sysbench-1.0.20]# make
3.3 MySQL找不到include文件mysql.h
在linux里面安装了mysql之后(yum install mysql-server )发现找不到mysql头文件mysql.h。
# 安装 mysql-devel
yum install mysql-devel
# 切换路径查看文件
cd /usr/include/mysql
# 查看include文件的路径
mysql_config --include
3.4 验证安装
[root@localhost sysbench-1.0.20]# sysbench --help
[root@localhost sysbench-1.0.20]# sysbench --version
sysbench 1.0.20
四、数据库压测
4.1 创建测试数据库
# 登录mysql
mysql -uroot -proot
# 创建数据库
mysql> create database sbtest;
4.2 准备数据
# 创建10个并发,10张表,20万条数据,测试120秒,每10秒报告一次
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.61.65 --mysql-port=3306 --mysql-user=root --mysql-password=root --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=200000 --threads=10 --time=120 --report-interval=10 prepare
4.3 压测数据
# 创建10个并发,10张表,20万条数据,测试120秒,每10秒报告一次,日志写到home/test/mysysbench.log
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.61.65 --mysql-port=3306 --mysql-user=root --mysql-password=root --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=200000 --threads=10 --time=120 --report-interval=10 run >> /home/test/mysysbench.log
本此测试为机械硬盘:
TPS:1002 per/sec
QPS:20038 per/sec
Latency-95th percentile:前95%的请求的最大响应时间 19.29ms
4.4 清除数据
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.61.65 --mysql-port=3306 --mysql-user=root --mysql-password=root cleanup
五、测试总结
- 尽量不要在MySQL服务器运行的机器上进行测试,一方面可能无法体现网络(哪怕是局域网)的影响,另一方面,sysbench的运行(尤其是设置的并发数较高时)会影响MySQL服务器的表现。
- 可以逐步增加客户端的并发连接数(–thread参数),观察在连接数不同情况下,MySQL服务器的表现;如分别设置为10,20,50,100等。
- 一般执行模式选择complex即可,如果需要特别测试服务器只读性能,或不使用事务时的性能,可以选择simple模式或nontrx模式。
- 如果连续进行多次测试,注意确保之前测试的数据已经被清理干净。