MySQL Sysbench压力测试
2017-12-20 16:42
337 查看
1.Sysbench的安装
1)下载相关tar包
用户可下载 http://imysql.com/wp-content/uploads/2014/09/sysbench-0.4.12-1.1.tgz
2)编译
执行以上两句即可,编译成功后,会在%sysbench_home%/sysbench/下生成 sysbench可执行文件
注意:需要添加环境变量
注意:LD_LIBRARY_PATH即MySQL lib所在目录,sysbench在执行的时候需要找到libmysqlclient_r.so文件
2.Sysbench压力测试
1)准备数据
* 创建database
注意:最后的prepare代表准备数据,同时可选项还有run(执行压力测试)、cleanup(清除数据)
参数释义:
2)只读压测
注意:使用tests/db/oltp.lua来进行测试,也可使用select.lua来测试
3)只更新压测
注意:相对于只读压测 改了两个地方,--test 使用了update_index.lua,--oltp-read-only改成了off
3)混合读写
注意:相对于只读压测只是修改了--oltp-read-only 为off
3.只读报告分析
1)10张表,单表数量1000000
* 不开启事务
结论:开启事务对性能影响不大
2)10张表,单表数量2000000
结论:
* 连接数据库线程数越多,相同请求数下平均响应时间越长,跟线程数成正比
* 线程数对单位时间的请求数几乎没有影响,达到峰值后就基本保持在这个数量
* 主键查询是最快的一种方式
3)10张表,单表数量4000000
结论:
* 表记录行数对 单位时间请求数几乎没有影响
* 表记录行数影响的只是响应时间,行数越多,响应时间越长
4)索引对查询的影响
只读报告整体分析:
1)线程数(即客户端连接数)对单位时间请求数影响(X轴:线程数[5,50,100,200],Y轴:单位时间请求数)
结论:
* 当未达到数据库请求峰值时,线程数对单位时间的请求数是有正向影响的,线程数越多,单位时间的请求数越大
* 当达到数据库请求峰值后,线程数对单位时间的请求数几乎没有影响(当越过峰值时,会有一定的下降)
2)线程数对数据库响应时间的影响(X轴:线程数[5,50,100,200],Y轴:响应时间(ms))
结论:
* 响应时间跟线程数成正比,线程数越多,响应时间越长
* 表数据量对响应时间有一定的影响(在一定范围内,影响不是很大)
3)索引对查询的影响(X轴:表数据量[1000000,2000000,4000000],Y轴:响应时间(ms))
结论:
* 表数据量越大,主键索引查询花费时间越长,几乎成正比(但小范围的数据量差距 不明显)
* 常规索引同主键索引
* 无索引查询时,数据量越大,查询花费时间越长,几乎成指数比例
* 有无索引对数据的查询影响巨大
4.只写报告分析
只写报告整体分析
1)线程数(即客户端连接数)对单位时间请求数影响(X轴:线程数[5,50,100,200],Y轴:单位时间请求数)
结论:
* 当未达到数据库请求峰值时,线程数对单位时间的请求数是有正向影响的,请求数越多,单位时间的请求数越大
* 当达到数据库请求峰值后,线程数对单位时间的请求数几乎没有影响
2)线程数对数据库响应时间的影响(X轴:线程数[5,50,100,200],Y轴:响应时间(ms))
结论:
* 响应时间跟线程数成正比,线程数越多,响应时间越长
* 表数据量对响应时间有一定的影响(在一定范围内,影响不是很大)
5.混合读写报告分析
混合读写报告整体分析
1)线程数(即客户端连接数)对单位时间请求数影响(X轴:线程数[5,50,100,200],Y轴:单位时间请求数)
结论:
* 当未达到数据库请求峰值时,线程数对单位时间的请求数是有正向影响的,请求数越多,单位时间的请求数越大
* 当达到数据库请求峰值后,线程数对单位时间的请求数几乎没有影响
结论:
* 响应时间跟线程数成正比,线程数越多,响应时间越长
* 表数据量对响应时间有一定的影响(在一定范围内,影响不是很大)
6.综合报告分析
1)单表1000000数据量下只读、只写、混合读写分析(X轴:线程数[5,50,100,200],Y轴:单位时间请求数)
结论:
* 单位时间请求数 只读 > 读写混合 > 只写
2)只读性能瓶颈
结论:
* CPU已经要达到极限,磁盘读写还没有,瓶颈在CPU上
3)只写性能瓶颈
结论:
* 磁盘读写已经快要达到极限,CPU还没有,瓶颈在磁盘写上
7.待验证
* mysql参数的修改对读写的影响 (innodb buffer pool)
* 随机读写、顺序读写的读写速度差异
* InnoDB、MyISAM等不同存储引擎对读写速度影响
。。。
参考文档:
http://imysql.cn/2014/10/17/sysbench-full-user-manual.shtml
https://www.cnblogs.com/conanwang/p/5910079.html
https://www.cnblogs.com/langtianya/p/5177837.html
1)下载相关tar包
用户可下载 http://imysql.com/wp-content/uploads/2014/09/sysbench-0.4.12-1.1.tgz
2)编译
cd /sysbench-0.4.12-1.1 ./autogen.sh ./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib && make
执行以上两句即可,编译成功后,会在%sysbench_home%/sysbench/下生成 sysbench可执行文件
注意:需要添加环境变量
vim /etc/profile //在最后添加上 export LD_LIBRARY_PATH=/usr/local/mysql/lib //保存文件后,执行source source /etc/profile
注意:LD_LIBRARY_PATH即MySQL lib所在目录,sysbench在执行的时候需要找到libmysqlclient_r.so文件
2.Sysbench压力测试
1)准备数据
* 创建database
create database sbtest;* 创建表及测试数据(可使用sysbench自带lua文件来测试)
./bin/sysbench --test=tests/db/oltp.lua \ --mysql-host=10.187.96.53 --mysql-port=3306 --mysql-user=root --mysql-password=root \ --mysql-db=sbtest --oltp-tables-count=10 --oltp-table-size=10000000 \ --report-interval=10 --oltp-dist-type=uniform --rand-init=on --max-requests=0 \ --oltp-test-mode=nontrx --oltp-nontrx-mode=select \ --oltp-read-only=on --oltp-skip-trx=on \ --max-time=180 --num-threads=12 \ prepare
注意:最后的prepare代表准备数据,同时可选项还有run(执行压力测试)、cleanup(清除数据)
参数释义:
--mysql-host MySQL所在地址 --mysql-port 端口号 --mysql-user 用户名 --mysql-password 密码 --mysql-db 测试所使用的DB(需提前创建好) --oltp-tables-count 创建表的数量(脚本会自动创建该数量的表在指定DB下) --oltp-table-size 单个表的数据量 --report-interval 隔多久输出报告 --oltp-dist-type 指定随机取样类型,可选值有 uniform(均匀分布), Gaussian(高斯分布), special(空间分布)。默认是special --oltp-test-mode 执行模式,这里是非事务式的。可选值有simple,complex,nontrx。默认是complex --oltp-nontrx-mode 可选值有select(默认), update_key, update_nokey, insert, delete,代表非事务式模式下使用的测试sql类型 --oltp-read-only 表示不止产生只读SQL,也就是使用oltp.lua时会采用读写混合模式。默认 off,如果设置为on,则不会产生update,delete,insert的sql --oltp-skip-trx=[on|off]:省略begin/commit语句。默认是off --max-requests=0:压力测试产生请求的总数,如果以下面的max-time来记,这个值设为0 --max-time=120:压力测试的持续时间,这里是2分钟。 --num-threads=12: 并发线程数,可以理解为模拟的客户端并发连接数
2)只读压测
./bin/sysbench --test=tests/db/oltp.lua \ --mysql-host=10.187.96.53 --mysql-port=3306 --mysql-user=root --mysql-password=root \ --mysql-db=sbtest --oltp-tables-count=10 --oltp-table-size=10000000 \ --report-interval=10 --oltp-dist-type=uniform --rand-init=on --max-requests=0 \ --oltp-test-mode=nontrx --oltp-nontrx-mode=select \ --oltp-read-only=on --oltp-skip-trx=on \ --max-time=180 --num-threads=12 \ run >> test-read/out.log
注意:使用tests/db/oltp.lua来进行测试,也可使用select.lua来测试
3)只更新压测
./bin/sysbench --test=tests/db/update_index.lua \ --mysql-host=10.187.96.53 --mysql-port=3306 --mysql-user=root --mysql-password=root \ --mysql-db=sbtest --oltp-tables-count=10 --oltp-table-size=10000000 \ --report-interval=10 --oltp-dist-type=uniform --rand-init=on --max-requests=0 \ --oltp-test-mode=nontrx --oltp-nontrx-mode=select \ --oltp-read-only=off --oltp-skip-trx=on \ --max-time=180 --num-threads=12 \ run >> test-update/out.log
注意:相对于只读压测 改了两个地方,--test 使用了update_index.lua,--oltp-read-only改成了off
3)混合读写
./bin/sysbench --test=tests/db/oltp.lua \ --mysql-host=10.187.96.53 --mysql-port=3306 --mysql-user=root --mysql-password=root \ --mysql-db=sbtest --oltp-tables-count=10 --oltp-table-size=10000000 \ --report-interval=10 --oltp-dist-type=uniform --rand-init=on --max-requests=0 \ --oltp-test-mode=nontrx --oltp-nontrx-mode=select \ --oltp-read-only=off --oltp-skip-trx=on \ --max-time=180 --num-threads=12 \ run >> test-all/out.log
注意:相对于只读压测只是修改了--oltp-read-only 为off
3.只读报告分析
1)10张表,单表数量1000000
* 不开启事务
结论:开启事务对性能影响不大
2)10张表,单表数量2000000
结论:
* 连接数据库线程数越多,相同请求数下平均响应时间越长,跟线程数成正比
* 线程数对单位时间的请求数几乎没有影响,达到峰值后就基本保持在这个数量
* 主键查询是最快的一种方式
3)10张表,单表数量4000000
结论:
* 表记录行数对 单位时间请求数几乎没有影响
* 表记录行数影响的只是响应时间,行数越多,响应时间越长
4)索引对查询的影响
只读报告整体分析:
1)线程数(即客户端连接数)对单位时间请求数影响(X轴:线程数[5,50,100,200],Y轴:单位时间请求数)
结论:
* 当未达到数据库请求峰值时,线程数对单位时间的请求数是有正向影响的,线程数越多,单位时间的请求数越大
* 当达到数据库请求峰值后,线程数对单位时间的请求数几乎没有影响(当越过峰值时,会有一定的下降)
2)线程数对数据库响应时间的影响(X轴:线程数[5,50,100,200],Y轴:响应时间(ms))
结论:
* 响应时间跟线程数成正比,线程数越多,响应时间越长
* 表数据量对响应时间有一定的影响(在一定范围内,影响不是很大)
3)索引对查询的影响(X轴:表数据量[1000000,2000000,4000000],Y轴:响应时间(ms))
结论:
* 表数据量越大,主键索引查询花费时间越长,几乎成正比(但小范围的数据量差距 不明显)
* 常规索引同主键索引
* 无索引查询时,数据量越大,查询花费时间越长,几乎成指数比例
* 有无索引对数据的查询影响巨大
4.只写报告分析
只写报告整体分析
1)线程数(即客户端连接数)对单位时间请求数影响(X轴:线程数[5,50,100,200],Y轴:单位时间请求数)
结论:
* 当未达到数据库请求峰值时,线程数对单位时间的请求数是有正向影响的,请求数越多,单位时间的请求数越大
* 当达到数据库请求峰值后,线程数对单位时间的请求数几乎没有影响
2)线程数对数据库响应时间的影响(X轴:线程数[5,50,100,200],Y轴:响应时间(ms))
结论:
* 响应时间跟线程数成正比,线程数越多,响应时间越长
* 表数据量对响应时间有一定的影响(在一定范围内,影响不是很大)
5.混合读写报告分析
混合读写报告整体分析
1)线程数(即客户端连接数)对单位时间请求数影响(X轴:线程数[5,50,100,200],Y轴:单位时间请求数)
结论:
* 当未达到数据库请求峰值时,线程数对单位时间的请求数是有正向影响的,请求数越多,单位时间的请求数越大
* 当达到数据库请求峰值后,线程数对单位时间的请求数几乎没有影响
结论:
* 响应时间跟线程数成正比,线程数越多,响应时间越长
* 表数据量对响应时间有一定的影响(在一定范围内,影响不是很大)
6.综合报告分析
1)单表1000000数据量下只读、只写、混合读写分析(X轴:线程数[5,50,100,200],Y轴:单位时间请求数)
结论:
* 单位时间请求数 只读 > 读写混合 > 只写
2)只读性能瓶颈
结论:
* CPU已经要达到极限,磁盘读写还没有,瓶颈在CPU上
3)只写性能瓶颈
结论:
* 磁盘读写已经快要达到极限,CPU还没有,瓶颈在磁盘写上
7.待验证
* mysql参数的修改对读写的影响 (innodb buffer pool)
* 随机读写、顺序读写的读写速度差异
* InnoDB、MyISAM等不同存储引擎对读写速度影响
。。。
参考文档:
http://imysql.cn/2014/10/17/sysbench-full-user-manual.shtml
https://www.cnblogs.com/conanwang/p/5910079.html
https://www.cnblogs.com/langtianya/p/5177837.html
相关文章推荐
- mysql5.6压力测试 sysbench工具
- 使用 sysbench对mysql进行压力测试介绍之一
- sysbench对mysql压力测试的详细教程
- 使用sysbench对Mysql进行压力测试查询性能
- sysbench mysql 压力测试
- sysbench压力测试,mysql压力测试
- 【MySQL】【压测】使用sysbench对MySQL进行压力测试
- 使用sysbench对mysql压力测试
- 使用sysbench对mysql压力测试
- sysbench安装、对Mysql压力测试、结果解读及mysql数据库跟踪优化
- mysql压力测试---sysbench
- sysbench安装、对Mysql压力测试、结果解读及mysql数据库跟踪优化
- 使用sysbench对mysql压力测试
- 使用 sysbench对mysql进行压力测试介绍之二
- sysbench对mysql压力测试的详细教程
- 对MYSQL进行压力测试
- 用mysqlslap进行MySQL压力测试【转】
- 使用Apache JMeter对SQL Server、Mysql、Oracle压力测试(四)
- 数据库压力测试工具mysqlslap
- (转)MySQL自带的性能压力测试工具mysqlslap详解