介绍

mysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。mysqlslap为mysql性能优化前后提供了直观的验证依据,系统运维和DBA人员应该掌握一些常见的压力测试工具,才能准确的掌握线上数据库支撑的用户流量上限及其抗压性等问题。

更改其默认的最大连接数

在对MySQL进行压力测试之前,需要更改其默认的最大连接数,如下:

[root@mysql ~]# vim /etc/my.cnf
................
[mysqld]
max_connections=1024
[root@mysql ~]# systemctl restart mysqld

登录MySQL查看最大连接数是否生效

#查看最大连接数
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1024  |
+-----------------+-------+
1 row in set (0.00 sec)

进行压力测试:

[root@mysql ~]# mysqlslap --defaults-file=/etc/my.cnf --concurrency=100,200 --iterations=1 --number-int-cols=20 --number-char-cols=30 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --engine=myisam,innodb --number-of-queries=2000 -uroot -p123 --verbose

上述命令测试说明:

模拟测试两次读写并发,第一次100,第二次200,自动生成SQL脚本,测试表包含20个init字段,30 个char字段,每次执行2000查询请求。测试引擎分别是myisam,innodb。(上述选项中有很多都是默认值,可以省略,如果想要了解各个选项的解释,可以使用mysqlslap --help进行查询)

上述命令返回结果如下:

测试结果说明:Myisam第一次100客户端同时发起增查用0.557/s,第二次200客户端同时发起增查用0.522/s Innodb第一次100客户端同时发起增查用0.256/s,第二次200客户端同时发起增查用0.303/s 。

可以根据实际需求,一点点的加大并发数量进行压力测试。

使用第三方sysbench工具进行压力测试

安装sysbench工具

[root@mysql ~]# yum -y install epel-release     #安装第三方epel源
[root@mysql ~]# yum -y install sysbench            #安装sysbench工具
[root@mysql ~]# sysbench --version           #确定工具已安装
sysbench 1.0.17
sysbench 可以进行以下测试:1. CPU 运算性能测试
2. 磁盘 IO 性能测试
3. 调度程序性能测试
4. 内存分配及传输速度测试
5. POSIX 线程性能测试
6. 数据库性能测试(OLTP 基准测试,需要通过 /usr/share/sysbench/ 目录中的 Lua 脚本执行,例如 oltp_read_only.lua 脚本执行只读测试)
7. sysbench 还可以通过运行命令时指定自己的 Lua 脚本来自定义测试。

查看sysbench工具的帮助选项

[root@mysql ~]# sysbench --help
Usage:sysbench [options]... [testname] [command]Commands implemented by most tests: prepare run cleanup help # 可用的命令,四个General options:            # 通用选项--threads=N                     要使用的线程数,默认 1 个 [1]--events=N                      最大允许的事件个数 [0]--time=N                        最大的总执行时间,以秒为单位 [10]--forced-shutdown=STRING        在 --time 时间限制到达后,强制关闭之前等待的秒数,默认“off”禁用(number of seconds to wait after the --time limit before forcing shutdown, or 'off' to disable) [off]--thread-stack-size=SIZE        每个线程的堆栈大小 [64K]--rate=N                        平均传输速率。0 则无限制 [0]--report-interval=N             以秒为单位定期报告具有指定间隔的中间统计信息 0 禁用中间报告 [0]--report-checkpoints=[LIST,...] 转储完整的统计信息并在指定的时间点重置所有计数器。参数是一个逗号分隔的值列表,表示从测试开始经过这个时间量时必须执行报告检查点(以秒为单位)。报告检查点默认关闭。 []--debug[=on|off]                打印更多 debug 信息 [off]--validate[=on|off]             尽可能执行验证检查 [off]--help[=on|off]                 显示帮助信息并退出 [off]--version[=on|off]              显示版本信息并退出 [off]--config-file=FILENAME          包含命令行选项的文件--tx-rate=N                     废弃,改用 --rate [0]--max-requests=N                废弃,改用 --events [0]--max-time=N                    废弃,改用 --time [0]--num-threads=N                 废弃,改用 --threads [1]Pseudo-Random Numbers Generator options:    # 伪随机数发生器选项--rand-type=STRING random numbers distribution {uniform,gaussian,special,pareto} [special]--rand-spec-iter=N number of iterations used for numbers generation [12]--rand-spec-pct=N  percentage of values to be treated as 'special' (for special distribution) [1]--rand-spec-res=N  percentage of 'special' values to use (for special distribution) [75]--rand-seed=N      seed for random number generator. When 0, the current time is used as a RNG seed. [0]--rand-pareto-h=N  parameter h for pareto distribution [0.2]Log options:    # 日志选项--verbosity=N verbosity level {5 - debug, 0 - only critical messages} [3]--percentile=N       percentile to calculate in latency statistics (1-100). Use the special value of 0 to disable percentile calculations [95]--histogram[=on|off] print latency histogram in report [off]General database options:   # 通用的数据库选项--db-driver=STRING  指定要使用的数据库驱动程序 ('help' to get list of available drivers)--db-ps-mode=STRING prepared statements usage mode {auto, disable} [auto]--db-debug[=on|off] print database-specific debug information [off]Compiled-in database drivers:   # 內建的数据库驱动程序,默认支持 MySQL 和 PostgreSQLmysql - MySQL driverpgsql - PostgreSQL drivermysql options:              # MySQL 数据库专用选项--mysql-host=[LIST,...]          MySQL server host [localhost]--mysql-port=[LIST,...]          MySQL server port [3306]--mysql-socket=[LIST,...]        MySQL socket--mysql-user=STRING              MySQL user [sbtest]--mysql-password=STRING          MySQL password []--mysql-db=STRING                MySQL database name [sbtest]--mysql-ssl[=on|off]             use SSL connections, if available in the client library [off]--mysql-ssl-cipher=STRING        use specific cipher for SSL connections []--mysql-compression[=on|off]     use compression, if available in the client library [off]--mysql-debug[=on|off]           trace all client library calls [off]--mysql-ignore-errors=[LIST,...] list of errors to ignore, or "all" [1213,1020,1205]--mysql-dry-run[=on|off]         Dry run, pretend that all MySQL client API calls are successful without executing them [off]pgsql options:              # PostgreSQL 数据库专用选项--pgsql-host=STRING     PostgreSQL server host [localhost]--pgsql-port=N          PostgreSQL server port [5432]--pgsql-user=STRING     PostgreSQL user [sbtest]--pgsql-password=STRING PostgreSQL password []--pgsql-db=STRING       PostgreSQL database name [sbtest]Compiled-in tests:          # 內建测试类型fileio - File I/O testcpu - CPU performance testmemory - Memory functions speed testthreads - Threads subsystem performance testmutex - Mutex performance testSee 'sysbench <testname> help' for a list of options for each test.

sysbench测试MySQL数据库性能

1.准备测试数据

#查看sysbench自带的lua脚本使用方法
[root@mysql ~]# sysbench /usr/share/sysbench/oltp_common.lua help
#必须创建sbtest库,sbtest事sysbench默认使用的库名
[root@mysql ~]# mysqladmin -uroot -p123 create sbtest;
#然后,准备测试所用的表,这些测试表放在测试库sbtest中。这里使用的lua脚本为/usr/share/sysbench/oltp_common.lua
[root@mysql ~]# sysbench --mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-user=root \
--mysql-password=123 \
/usr/share/sysbench/oltp_common.lua \
--tables=10 \
--table_size=100000 \
prepare
#其中--tables=10表示创建10个测试表,
#--table_size=100000表示每个表中插入10W行数据,
#prepare表示这是准备数的过程。

2.确认测试数据以存在

[root@mysql ~]# mysql -uroot  -p123 sbtest;        #登录到sbtest库
mysql> show tables;           #查看相应的表
+------------------+
| Tables_in_sbtest |
+------------------+
| sbtest1          |
| sbtest10         |
| sbtest2          |
| sbtest3          |
| sbtest4          |
| sbtest5          |
| sbtest6          |
| sbtest7          |
| sbtest8          |
| sbtest9          |
+------------------+
10 rows in set (0.00 sec)mysql> select count(*) from sbtest1;        #随机选择一个表,确认其有100000条数据
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.01 sec)

3.数据库测试和结果分析

稍微修改下之前准备数据的语句,就可以拿来测试了。需要注意的是,之前使用的lua脚本为oltp_common.lua,它是一个通用脚本,是被其它lua脚本调用的,它不能直接拿来测试。所以,我这里用oltp_read_write.lua脚本来做读、写测试。还有很多其它类型的测试,比如只读测试、只写测试、删除测试、大批量插入测试等等。可找到对应的lua脚本进行调用即可。

#执行测试命令如下:

[root@mysql ~]# sysbench --threads=4 \
--time=20 \--report-interval=5 \--mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-user=root \
--mysql-password=123 \
/usr/share/sysbench/oltp_read_write.lua \
--tables=10 \--table_size=100000 \
run
上述命令返回的结果如下:[root@mysql ~]# sysbench --threads=4 --time=20  --report-interval=5  --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=10  --table_size=100000 runsysbench 1.0.17 (using system LuaJIT 2.0.4)Running the test with following options:
Number of threads: 4
Report intermediate results every 5 second(s)
Initializing random number generator from current timeInitializing worker threads...Threads started!
#以下是每5秒返回一次的结果,统计的指标包括:
# 线程数、tps(每秒事务数)、qps(每秒查询数)、
# 每秒的读/写/其它次数、延迟、每秒错误数、每秒重连次数
[ 5s ] thds: 4 tps: 1040.21 qps: 20815.65 (r/w/o: 14573.17/4161.25/2081.22) lat (ms,95%): 7.17 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 4 tps: 1083.34 qps: 21667.15 (r/w/o: 15165.93/4334.55/2166.68) lat (ms,95%): 6.55 err/s: 0.00 reconn/s: 0.00
[ 15s ] thds: 4 tps: 1121.57 qps: 22429.09 (r/w/o: 15700.64/4485.30/2243.15) lat (ms,95%): 6.55 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 4 tps: 1141.69 qps: 22831.98 (r/w/o: 15982.65/4566.16/2283.18) lat (ms,95%): 6.09 err/s: 0.00 reconn/s: 0.00
SQL statistics:queries performed:read:                            307146         # 执行的读操作数量write:                           87756            # 执行的写操作数量other:                           43878          # 执行的其它操作数量total:                           438780transactions:                        21939  (1096.57 per sec.)       # 执行事务的平均速率queries:                             438780 (21931.37 per sec.)        # 平均每秒能执行多少次查询ignored errors:                      0      (0.00 per sec.)reconnects:                          0      (0.00 per sec.)General statistics:total time:                          20.0055s           # 总消耗时间total number of events:              21939          # 总请求数量(读、写、其它)Latency (ms):min:                                    1.39avg:                                    3.64max:                                  192.0595th percentile:                        6.67          # 采样计算的平均延迟sum:                                79964.26Threads fairness:events (avg/stddev):           5484.7500/15.12execution time (avg/stddev):   19.9911/0.00

4.cpu/io/内存等测试 sysbench内置的几个测试指标如下:

[root@mysql ~]# sysbench --help..........  # 省略部分内容
Compiled-in tests:fileio - File I/O testcpu - CPU performance testmemory - Memory functions speed testthreads - Threads subsystem performance testmutex - Mutex performance test

可以直接help输出测试方法,例如,fileio测试:

[root@mysql ~]# sysbench fileio help
sysbench 1.0.17 (using system LuaJIT 2.0.4)fileio options:--file-num=N                  number of files to create [128]--file-block-size=N           block size to use in all IO operations [16384]--file-total-size=SIZE        total size of files to create [2G]--file-test-mode=STRING       test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}--file-io-mode=STRING         file operations mode {sync,async,mmap} [sync]--file-async-backlog=N        number of asynchronous operatons to queue per thread [128]--file-extra-flags=[LIST,...] list of additional flags to use to open files {sync,dsync,direct} []--file-fsync-freq=N           do fsync() after this number of requests (0 - don't use fsync()) [100]--file-fsync-all[=on|off]     do fsync() after each write operation [off]--file-fsync-end[=on|off]     do fsync() at the end of test [on]--file-fsync-mode=STRING      which method to use for synchronization {fsync, fdatasync} [fsync]--file-merged-requests=N      merge at most this number of IO requests if possible (0 - don't merge) [0]--file-rw-ratio=N             reads/writes ratio for combined test [1.5]

5.测试io性能 例如,创建5个文件,总共2G,每个文件大概400M。

[root@mysql ~]# sysbench fileio --file-num=5 --file-total-size=2G prepare
[root@mysql ~]# ll -lh test*
-rw------- 1 root root 410M May 26 16:05 test_file.0
-rw------- 1 root root 410M May 26 16:05 test_file.1
-rw------- 1 root root 410M May 26 16:05 test_file.2
-rw------- 1 root root 410M May 26 16:05 test_file.3
-rw------- 1 root root 410M May 26 16:05 test_file.4

然后运行测试:

[root@mysql ~]# sysbench --events=5000 \
--threads=16 \
fileio \
--file-num=5 \
--file-total-size=2G \
--file-test-mode=rndrw \
--file-fsync-freq=0 \
--file-block-size=16384 \
run

返回的结果如下:

Running the test with following options:
Number of threads: 16
Initializing random number generator from current timeExtra file open flags: (none)
5 files, 409.6MiB each
2GiB total file size
Block size 16KiB
Number of IO requests: 5000
Read/Write ratio for combined random IO test: 1.50
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Initializing worker threads...Threads started!File operations:reads/s:                      9899.03writes/s:                     6621.38fsyncs/s:                     264.33Throughput:               # 吞吐量read, MiB/s:                  154.66      #表示读带宽written, MiB/s:               103.46     #表示写的带宽General statistics:total time:                          0.3014stotal number of events:              5000Latency (ms):min:                                    0.00avg:                                    0.81max:                                   53.5695th percentile:                        4.10sum:                                 4030.48Threads fairness:events (avg/stddev):           312.5000/27.64execution time (avg/stddev):   0.2519/0.02

6.测试cpu性能

[root@mysql ~]# sysbench cpu --threads=40 --events=10000 --cpu-max-prime=20000 run

然后对返回结果进行分析

原创地址:
https://blog.51cto.com/14227204/2498644?source=drh
原创作者:张九冫
参考链接 :
通过mysqlslap与sysbench对MySQL进行压测:https://mp.weixin.qq.com/s/cPrsabGVSfAji1s2GRikcA

通过mysqlslap与sysbench对MySQL进行压测相关推荐

  1. sysbench性能压测以及mysql性能压测

    sysbench性能压测以及mysql性能压测 一.Sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于各种不同系统的参数下的数据库负载情况. 主要测试方式 cpu性能 磁盘io性能 ...

  2. mysql数据库压测_MySQL数据库压测有哪些注意事项和FAQ

    MySQL数据库压测有哪些注意事项和FAQ 发布时间:2020-05-12 15:12:49 来源:亿速云 阅读:216 作者:三月 下面讲讲关于MySQL数据库压测有哪些注意事项和FAQ,文字的奥妙 ...

  3. 简单、易用的 MySQL 官方压测工具

    一.MySQL自带的压力测试工具 Mysqlslap mysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新, ...

  4. 强大的MySQL 官方压测神器,简单、易用

    一.MySQL自带的压力测试工具 Mysqlslap mysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新, ...

  5. mysql tpcc_MySQL压测--TPCC安装,测试

    今天我们来讲一下MySQL的压力测试工具,目前我接触到的主要有两种压力测试工具:TPCC,Sysbench,前者只适合MySQL数据库OLTP压力测试,而Sysbench功能就比较广泛,可以测试OS的 ...

  6. mysql数据库压测_MySql压测

    安装sysbench环境: curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | ...

  7. mysql qps 压测_压测QPS 过低

    你好,你的问题中,我可以依据我之前的管理经验回答你问题2.问题3.问题1这个问题并不是我擅长的部分,所以这个问题就不回答你了. 问题2回答: 其实你想解决的就是"copy on write& ...

  8. mysql 并发 压测工具_MySQL压测工具mysqlslap的介绍与使用

    一.Mysqlslap介绍 mysqlslap是MySQL5.1之后自带的benchmark基准测试工具,类似Apache Bench负载产生工具,生成schema,装载数据,执行benckmark和 ...

  9. mysql链接压测_MySQL压测工具mysqlslap的介绍与使用

    一.Mysqlslap介绍 mysqlslap是MySQL5.1之后自带的benchmark基准测试工具,类似Apache Bench负载产生工具,生成schema,装载数据,执行benckmark和 ...

最新文章

  1. 沙盒化容器:是容器还是虚拟机
  2. 用c语言编程实现strcpy,用c语言.模拟实现strcpy,strcat,strcat,memcpy,memmove
  3. Cython屏蔽GIL锁实践
  4. SAP中查询用户操作日志的事务码
  5. c++ console 取实时输入_灵活使用 console 让 js 调试更简单
  6. centos7开启vnc服务_CentOS 7.2搭建VNC远程桌面服务的方法
  7. CSS3-多列布局-伸缩盒布局-伸缩项目
  8. 凑热闹买了个小米剃须刀
  9. 【滤波器】基于matlab窗函数法FIR数字滤波器设计【含Matlab源码 316期】
  10. abbot_release
  11. Matlab/Simulink-Boost电路双闭环仿真搭建
  12. jsonp跨域原理(简单粗暴)
  13. 详解MPO/MTP主干光纤跳线规格参数、MPO连接说明、MPO极性分类
  14. 【Android 学习】之二维码扫描开发(闪光灯功能)
  15. 互联网并发与安全系列教程(07) - 常见的Web安全漏洞(其它漏洞)
  16. 家里宽带使用有线连接网速很快但是使用无线连接网速很慢的解决方法
  17. 软件体系结构-03-层次体系结构概述
  18. 8.MySQL DCL (数据控制语言) 语句
  19. java计算机毕业设计校园快递联盟系统源程序+mysql+系统+lw文档+远程调试
  20. ubuntu 1604 修改mac地址

热门文章

  1. 矩阵的奇异值分解_线性代数31——奇异值分解
  2. 主成分分析、因子分析和聚类分析的区别
  3. [每日一题] OCP1z0-047 :2013-07-12 多表插入
  4. java float.max value_java – Float.POSITIVE_INFINITY和Float.MAX_VALUE有什么区别?
  5. Hadoop生态圈-Flume的组件之sink处理器
  6. MySQL 5.7.18忘记密码和密码过期解决
  7. 【oracle ocp知识点一】
  8. 行业大佬集体唱衰教育O2O,强管控的B2C模式将是唯一出路
  9. 【多线程】--生产者消费者模式--synchronized版本
  10. 接口的实际应用---制定标准