前言:最近新到一批机器,需要对机器进行压测,主要压测范围包括CPU测试、磁盘IO测试、线程测试、OLTP测试等,那么sysbench就可以满足我们的压测需求。下面我们简单来看下sysbench的安装使用以及压测结果的解读。

一、sysbench安装

sysbench安装其实非常简单,可以参考下git,其实MySQL官网也可以下到,不过版本比较老了,最新的版本是sysbench1.1.0,这里我们讲下源码编译安装。
上传sysbench到服务器、解压、安装:

[root@localhost tmp]# unzip sysbench-master.zip
[root@localhost tmp]# cd sysbench-master
[root@localhost sysbench-master]# ./autogen.sh
[root@localhost sysbench-master]# ./configure
[root@localhost sysbench-master]# make -j
[root@localhost sysbench-master]# make install

其实可以查看下README.md,上面也写了如何安装

## Build and Installshell./autogen.sh# Add --with-pgsql to build with PostgreSQL support./configuremake -jmake install

二、压测过程及压测结果解读

1.cpu测试

[root@localhost storage]# sysbench --test=cpu --cpu-max-prime=2000000 run
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)Running the test with following options:
Number of threads: 1
Initializing random number generator from current timePrime numbers limit: 2000000Initializing worker threads...Threads started!CPU speed:events per second:     0.63Throughput:events/s (eps):                      0.6334time elapsed:                        11.0520stotal number of events:              7Latency (ms):min:                                 1571.86avg:                                 1578.84max:                                 1620.5395th percentile:                     1618.78sum:                                11051.91Threads fairness:events (avg/stddev):           7.0000/0.00execution time (avg/stddev):   11.0519/0.00

cpu测试主要是进行素数的加法运算,上面我们的例子中,指定了最大的质数发生器数量为 2000000,可以看出服务器此次测试 执行时间 大约为11.05秒
2.磁盘IO测试

[root@localhost storage]# sysbench --test=fileio --num-threads=16 --file-total-size=30G --file-test-mode=rndrw prepare
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
WARNING: --num-threads is deprecated, use --threads instead
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)128 files, 245760Kb each, 30720Mb total
Creating files for the test...
Extra file open flags: (none)
Creating file test_file.0
Creating file test_file.1
Creating file test_file.2
Creating file test_file.3
Creating file test_file.4
Creating file test_file.5
Creating file test_file.6
Creating file test_file.7
Creating file test_file.8
Creating file test_file.9
Creating file test_file.10
Creating file test_file.11
Creating file test_file.12
Creating file test_file.13
Creating file test_file.14
Creating file test_file.15
Creating file test_file.16
Creating file test_file.17
Creating file test_file.18
Creating file test_file.19
Creating file test_file.20
Creating file test_file.21
Creating file test_file.22
Creating file test_file.23
Creating file test_file.24
Creating file test_file.25
Creating file test_file.26
Creating file test_file.27
Creating file test_file.28
Creating file test_file.29
Creating file test_file.30
Creating file test_file.31
Creating file test_file.32
Creating file test_file.33
Creating file test_file.34
Creating file test_file.35
Creating file test_file.36
Creating file test_file.37
Creating file test_file.38
Creating file test_file.39
Creating file test_file.40
Creating file test_file.41
Creating file test_file.42
Creating file test_file.43
Creating file test_file.44
Creating file test_file.45
Creating file test_file.46
Creating file test_file.47
Creating file test_file.48
Creating file test_file.49
Creating file test_file.50
Creating file test_file.51
Creating file test_file.52
Creating file test_file.53
Creating file test_file.54
Creating file test_file.55
Creating file test_file.56
Creating file test_file.57
Creating file test_file.58
Creating file test_file.59
Creating file test_file.60
Creating file test_file.61
Creating file test_file.62
Creating file test_file.63
Creating file test_file.64
Creating file test_file.65
Creating file test_file.66
Creating file test_file.67
Creating file test_file.68
Creating file test_file.69
Creating file test_file.70
Creating file test_file.71
Creating file test_file.72
Creating file test_file.73
Creating file test_file.74
Creating file test_file.75
Creating file test_file.76
Creating file test_file.77
Creating file test_file.78
Creating file test_file.79
Creating file test_file.80
Creating file test_file.81
Creating file test_file.82
Creating file test_file.83
Creating file test_file.84
Creating file test_file.85
Creating file test_file.86
Creating file test_file.87
Creating file test_file.88
Creating file test_file.89
Creating file test_file.90
Creating file test_file.91
Creating file test_file.92
Creating file test_file.93
Creating file test_file.94
Creating file test_file.95
Creating file test_file.96
Creating file test_file.97
Creating file test_file.98
Creating file test_file.99
Creating file test_file.100
Creating file test_file.101
Creating file test_file.102
Creating file test_file.103
Creating file test_file.104
Creating file test_file.105
Creating file test_file.106
Creating file test_file.107
Creating file test_file.108
Creating file test_file.109
Creating file test_file.110
Creating file test_file.111
Creating file test_file.112
Creating file test_file.113
Creating file test_file.114
Creating file test_file.115
Creating file test_file.116
Creating file test_file.117
Creating file test_file.118
Creating file test_file.119
Creating file test_file.120
Creating file test_file.121
Creating file test_file.122
Creating file test_file.123
Creating file test_file.124
Creating file test_file.125
Creating file test_file.126
Creating file test_file.127
32212254720 bytes written in 55.25 seconds (556.00 MiB/sec).[root@localhost storage]# sysbench --test=fileio --num-threads=16 --file-total-size=30G --file-test-mode=rndrw runWARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
WARNING: --num-threads is deprecated, use --threads instead
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)Running the test with following options:
Number of threads: 16
Initializing random number generator from current timeExtra file open flags: (none)
128 files, 240MiB each
30GiB total file size
Block size 16KiB
Number of IO requests: 0
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Initializing worker threads...Threads started!Throughput:read:  IOPS=68491.05 1070.17 MiB/s (1122.16 MB/s)write: IOPS=45660.96 713.45 MiB/s (748.11 MB/s)fsync: IOPS=146103.57Latency (ms):min:                                  0.00avg:                                  0.06max:                                  3.6195th percentile:                      0.31sum:                             156128.82

可以看到,磁盘的读IOPS可以达到68491.05,写IOPS可以达到45660.96,fsync可以达到146103.57
3.线程测试

[root@localhost storage]# sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
WARNING: --num-threads is deprecated, use --threads instead
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)Running the test with following options:
Number of threads: 64
Initializing random number generator from current timeInitializing worker threads...Threads started!Throughput:events/s (eps):                      14851.1802time elapsed:                        10.0036stotal number of events:              148565Latency (ms):min:                                    0.02avg:                                    4.31max:                                   24.4995th percentile:                       10.46sum:                               639889.93Threads fairness:events (avg/stddev):           2321.3281/42.94execution time (avg/stddev):   9.9983/0.00

(发送64次/个测试线程请求,每次/个线程请求产生/生成100个数量,每个线程的锁数量为2) ,测试执行时间为10秒
4.内存测试

[root@localhost storage]# sysbench --test=memory --memory-block-size=8k --memory-total-size=40G run
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)Running the test with following options:
Number of threads: 1
Initializing random number generator from current timeRunning memory speed test with the following options:block size: 8KiBtotal size: 40960MiBoperation: writescope: globalInitializing worker threads...Threads started!Total operations: 5242880 (1443403.42 per second)40960.00 MiB transferred (11276.59 MiB/sec)Throughput:events/s (eps):                      1443403.4239time elapsed:                        3.6323stotal number of events:              5242880Latency (ms):min:                                    0.00avg:                                    0.00max:                                    0.0295th percentile:                        0.00sum:                                 2926.10Threads fairness:events (avg/stddev):           5242880.0000/0.00execution time (avg/stddev):   2.9261/0.00

上述参数指定了本次测试整个过程是在内存中传输 40G 的数据量,每个 block 大小为 8K。测试结果显示:
执行时间为3.6323秒,每秒传输速度为11276.59Mb每秒
5.OLTP测试
(1)100线程
数据准备:

[root@localhost storage]# sysbench /usr/local/share/sysbench/oltp_common.lua \
> --mysql-user=tpcc --mysql-password=tpcc --mysql-socket=/tmp/mysql3306.sock \
> --tables=10 --table_size=20000000 --threads=100   --max-requests=0 prepare
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)Initializing worker threads...Creating table 'sbtest1'...
Creating table 'sbtest4'...
Creating table 'sbtest2'...
Creating table 'sbtest9'...
Creating table 'sbtest6'...
Creating table 'sbtest8'...
Creating table 'sbtest7'...
Creating table 'sbtest5'...
Creating table 'sbtest10'...
Creating table 'sbtest3'...
Inserting 20000000 records into 'sbtest1'
Inserting 20000000 records into 'sbtest7'
Inserting 20000000 records into 'sbtest4'
Inserting 20000000 records into 'sbtest9'
Inserting 20000000 records into 'sbtest6'
Inserting 20000000 records into 'sbtest8'
Inserting 20000000 records into 'sbtest2'
Inserting 20000000 records into 'sbtest5'
Inserting 20000000 records into 'sbtest3'
Inserting 20000000 records into 'sbtest10'
Creating a secondary index on 'sbtest4'...
Creating a secondary index on 'sbtest1'...
Creating a secondary index on 'sbtest10'...
Creating a secondary index on 'sbtest3'...
Creating a secondary index on 'sbtest6'...
Creating a secondary index on 'sbtest8'...
Creating a secondary index on 'sbtest7'...
Creating a secondary index on 'sbtest9'...
Creating a secondary index on 'sbtest5'...
Creating a secondary index on 'sbtest2'...

开始测试:

[root@localhost storage]# sysbench /usr/local/share/sysbench/oltp_read_write.lua --mysql-host=localhost --mysql-port=3306 --mysql-db=sbtest --mysql-user=tpcc --mysql-password=tpcc --table_size=20000000 --tables=10 --threads=100 --time=3600 --report-interval=10 --mysql-socket=/tmp/mysql3306.sock run > /tmp/40_100.log

测试过程中,可以tail -f /tmp/40_100.log查看输出
测试结果:这里只展示统计部分

SQL statistics:queries performed:read:                            143195290write:                           40912940other:                           20456470total:                           204564700transactions:                        10228235 (2841.15 per sec.)queries:                             204564700 (56823.07 per sec.)ignored errors:                      0      (0.00 per sec.)reconnects:                          0      (0.00 per sec.)Throughput:events/s (eps):                      2841.1536time elapsed:                        3600.0289stotal number of events:              10228235Latency (ms):min:                                    2.49avg:                                   35.19max:                                 2017.5495th percentile:                       39.65sum:                            359973625.38Threads fairness:events (avg/stddev):           102282.3500/5194.20execution time (avg/stddev):   3599.7363/0.01

(2)200线程
数据准备:

[root@localhost storage]# sysbench /usr/local/share/sysbench/oltp_common.lua \
> --mysql-user=tpcc --mysql-password=tpcc --mysql-socket=/tmp/mysql3306.sock \
> --tables=10 --table_size=20000000 --threads=200   --max-requests=0 prepare

开始测试:

[root@localhost storage]# sysbench /usr/local/share/sysbench/oltp_read_write.lua \
--mysql-host=localhost --mysql-port=3306 --mysql-db=sbtest --mysql-user=tpcc \
--mysql-password=tpcc --table_size=20000000 --tables=10 --threads=200 --time=3600 \
--report-interval=10 --mysql-socket=/tmp/mysql3306.sock run > /tmp/40_200.log

测试结果:

SQL statistics:queries performed:read:                            142876258write:                           40821788other:                           20410894total:                           204108940transactions:                        10205447 (2834.80 per sec.)queries:                             204108940 (56696.02 per sec.)ignored errors:                      0      (0.00 per sec.)reconnects:                          0      (0.00 per sec.)Throughput:events/s (eps):                      2834.8009time elapsed:                        3600.0577stotal number of events:              10205447Latency (ms):min:                                    2.39avg:                                   70.55max:                                 2011.6595th percentile:                       80.03sum:                            719978372.22Threads fairness:events (avg/stddev):           51027.2350/3840.19execution time (avg/stddev):   3599.8919/0.02

(3)300线程
数据准备:

[root@localhost storage]# sysbench /usr/local/share/sysbench/oltp_common.lua \
> --mysql-user=tpcc --mysql-password=tpcc --mysql-socket=/tmp/mysql3306.sock \
> --tables=10 --table_size=20000000 --threads=300   --max-requests=0 prepare

开始测试:

sysbench /usr/local/share/sysbench/oltp_read_write.lua \
--mysql-host=localhost --mysql-port=3306 --mysql-db=sbtest \
--mysql-user=tpcc --mysql-password=tpcc --table_size=20000000 --tables=10 --threads=300 \
--time=3600 --report-interval=10 --mysql-socket=/tmp/mysql3306.sock run > /tmp/40_300.log

测试结果:

SQL statistics:queries performed:read:                            144281438write:                           41223268other:                           20611634total:                           206116340transactions:                        10305817 (2862.66 per sec.)queries:                             206116340 (57253.12 per sec.)ignored errors:                      0      (0.00 per sec.)reconnects:                          0      (0.00 per sec.)Throughput:events/s (eps):                      2862.6561time elapsed:                        3600.0891stotal number of events:              10305817Latency (ms):min:                                    2.64avg:                                  104.79max:                                 4576.6095th percentile:                      123.28sum:                           1079986824.04Threads fairness:events (avg/stddev):           34352.7233/2459.96execution time (avg/stddev):   3599.9561/0.03

生成压测图
安装gnuplot

plot 'D:\40_100.log' using 9 with linepoint title '100 threads','D:\40_200.log' using 9 with linepoint title '200 threads','D:\40_300.log' using 9 with linepoint title '300 threads';

多线程QPS对比图

多线程TPS对比图

三、压测注意事项

1.在OLTP测试过程中,数据库初始化后,冷备data目录,每次测试完毕后删除当前数据目录,拷贝data目录重新启动,为的是每次开始测试前环境保持一致。
2.测试完成后,需要再系统层做一些清理的工作
shell>sync #刷新脏数据到磁盘
shell>echo 3 >/proc/sys/vm/drop_cache #清除cache
shell>swapoff -a && swapon -a 释放swap
3.压测过程中需要修改参数max_prepared_stmt_count默认为16382,修改为65536
4.如果是SSD硬盘的话,innodb_io_capacity和innodb_io_capacity_max两个参数也要相应调大,建议调整到50000以上。
5.对于测试数据的准备,我们通过show engine innodb status观察Free buffers,尽量模拟生产环境,让测试数据填满整个buffer pool。我这里innodb_buffer_pool_size设置的40G,测试表数量10张,每张表数据2000万,差不多填满buffer pool。

下篇会给大家带来InnoDB引擎和TokuDB引擎的压力测试。

作者:拾荒者charley
链接:https://www.jianshu.com/p/9823b4aa445a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

sysbench压测服务器及结果解读(重点)相关推荐

  1. 【MySQL】sysbench压测服务器及结果解读

    前言:最近新到一批机器,需要对机器进行压测,主要压测范围包括CPU测试.磁盘IO测试.线程测试.OLTP测试等,那么sysbench就可以满足我们的压测需求.下面我们简单来看下sysbench的安装使 ...

  2. 05:Sysbench压测-innodb_deadlock_detect参数对性能的影响

    目录 sysbench压测-innodb_deadlock_detect参数对性能的影响 一.OLTP测试前准备 二.进行OLTP测试 三.测试结果解读: 四.关于测试后的结论: 五.关于测试后的性能 ...

  3. sysbench 压测 mysql_sysbench压测

    一:sysbench的安装遇到的几个问题: 解决办法: yum install automake 解决办法:yum install libtool sysbench 的一些常用参数低版本和高版本是有点 ...

  4. Sysbench压测

    1.安装sysbench yum -y install make automake libtool pkgconfig libaio-devel yum -y install mariadb-deve ...

  5. PosgreSQL快速参数调优和sysbench压测

    关于PostgreSQL的性能调优可以参考<PostgreSQL 9.0 High Performance>,以及朱贤文在2014 PostgreSQL中国用户大会上分享的<高性能P ...

  6. 灵活应对流量压力,定期压测服务器,鹿晗结婚都不怕

    热点来的太快就像龙卷风,明星的八卦总能作为事件引发热点. 10月8日,鹿晗与关晓彤恋情公布,瞬间上了热搜,粉丝炸了,微博的服务器也跟着瘫痪了. 微博瘫痪,让一位微博工程师在结婚的当口放下酒杯,开始扩容 ...

  7. java压测服务器_Java简单模拟设备压测服务器(Rabbitmq)

    进入idea,新建一个maven项目 主要是模拟150个设备同时并发,并发时间持续15min 1.创建客户端,构造请求发送到对应的rabbitmq的队列,用的protobuf协议. importcom ...

  8. sysbench 压测 详解

    下载sysbench(mysql官网就有) 解压,进入解压以后的目录 ./autogen.sh ./configure --with-mysql-includes=/usr/local/mysql/i ...

  9. sysbench 压测

    sysbench安装 (1)下载解压 wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.z ...

最新文章

  1. 网站内链的6大常见形式你了解多少?
  2. 【深度学习看手相】台湾学生获奖 AI 项目是科学还是伪科学?
  3. spark shell 删除失效_Spark任务提交源码解析
  4. Python语法入门
  5. 面向对象的三大特性和五大原则
  6. 身份证号正则验证及提取性别出生年月出生时间
  7. 模拟器打开开发者模式
  8. python背景颜色代码大全_Python实现转换图片背景颜色代码
  9. 数格子算面积的方法_数方格在平面图形面积公式推导教学中的妙用
  10. 机器学习方向上还有没有创新点呢?
  11. 图片后缀名批量快速修改
  12. php红包互助源码_完整的微信红包接口API实现(php版)
  13. 纪念一下获得十大优秀学生
  14. SSM框架 基于Bootstrap fileinput 实现文件上传功能
  15. 利用python 脚本实现腾讯企业邮箱附件的批量下载
  16. RPA-艺赛旗iS-RPA Studio 9.0 Beta 现已发布
  17. 智能计算机的功能有哪些功能,智能机器人有什么功能—智能机器人功能介绍
  18. 【论文精读】Natural Image Stitching Using Depth Maps
  19. chatra无法注册
  20. SAP与三大财务报表之 “现金流量表”

热门文章

  1. C/C++语言堆栈指引
  2. iphone微信美颜插件_iPhone、安卓微信自动更新,又有新功能?
  3. 02_pandas获取数据(指定列获取、[]方式获取、loc函数,at函数, iloc函数 iat函数)
  4. 数据采集之解析Mysql的binlog日志发送至Kafka实时消费(转:https://blog.csdn.net/liguohuabigdata/article/details/79472777)
  5. s:if的用法(判断用户是否登录过了的操作)
  6. php中添加分类的界面设计,zblog php新增自定义分类模板和文章模板
  7. python 多继承与super使用详解_继承中的MRO与super详解
  8. python中numpy与matlab的对应关系
  9. Homepage Machine Learning Algorithm 浅谈深度学习中的激活函数 - The Activation Function in Deep Learning
  10. 六大赚钱定律,让你赚大钱