转 Sysbench 的下载和 测试神器:一条命令生成百万级测试数据
https://cloud.tencent.com/developer/article/1745179
https://cloud.tencent.com/developer/article/1826328
###sample 1
sysbench简单使用
下载文件
wget https://repo.percona.com/yum/release/7/RPMS/x86_64/sysbench-1.0.20-6.el7.x86_64.rpm
安装
yum localinstall -y sysbench-1.0.20-6.el7.x86_64.rpm
使用
创建配置文件
$ cat sysbench/tidb_conf
mysql-host=192.168.100.38
mysql-port=4000
mysql-user=root
mysql-password=123456
mysql-db=sbtest
time=600
threads=16
report-interval=10
db-driver=mysql
准备数据
sysbench --config-file=sysbench/tidb_conf oltp_point_select --tables=1 --table-size=10000000 prepare
测试
sysbench --config-file=sysbench/tidb_conf oltp_update_index --tables=1 --table-size=2000000000 run
参数: oltp_update_index 更新index列 oltp_point_select oltp_read_only 只读 oltp_read_write 读写 oltp_update_non_index 更新非index列 可相互替换
参考官网说明:https://github.com/akopytov/sysbench/blob/master/README.md#general-command-line-options
清理数据
sysbench --config-file=sysbench/tidb_conf oltp_point_select --tables=1 --table-size=200000 cleanup
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100327.html原文链接:
#######sample 2
Sysbench测试神器:一条命令生成百万级测试数据
1. 基准测试
基准测试(benchmarking)
是性能测试的一种类型,强调的是对一类测试对象的某些性能指标进行定量的、可复现、可对比的测试。
进一步来理解,基准测试
是在某个时候通过基准测试建立一个已知的性能水平(称为基准线),当系统的软硬件环境发生变化之后再进行一次基准测试以确定那些变化对性能的影响,这也是基准测试最常见的用途。其他用途包括测定某种负载水平下的性能极限、管理系统或环境的变化、发现可能导致性能问题的条件等等。
2. 基准测试的作用
对于大多数Web应用而言,系统的瓶颈往往很容易发生在数据库端,原因很简单:Web应用中的其他因素,例如网络带宽、负载均衡节点、应用服务器(包括CPU、内存、硬盘灯、连接数等)、缓存,都很容易通过水平的扩展(俗称加机器)来实现性能的提高。而对于数据库如MySQL
,由于数据一致性的要求,无法通过增加机器来分散向数据库写数据带来的压力;虽然可以通过前置缓存(Redis等)、读写分离、分库分表来减轻压力,但是与系统其它组件的水平扩展相比,受到了太多的限制。
而对数据库的基准测试的作用,就是分析在当前的配置下(包括硬件配置、OS、数据库设置等),数据库的性能表现,从而找出数据库的性能阈值,并根据实际系统的要求调整配置。除此之外,对数据库服务器进行基准测试,也通常用于观察对比数据库结构修改之前以及修改之后,其性能会受到什么样的影响。
3. 基准测试与压力测试区别
很多时候,基准测试和压力测试在实际使用的过程中,很容易被弄混淆。基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简单、直接、易于测试,数据可以由工具生成,不要求真实;而压力测试一般考虑业务逻辑(如购物车业务),要求真实的数据。
4. 基准测试的指标及工具
常见的数据库指标包括:
- TPS/QPS:主要用于衡量吞吐量。
- 响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。
- 并发量:同时处理的查询请求的数量。
如果只是针对数据库服务器,例如只针对MySQL数据库开展基准测试,一般可以使用专门的工具进行,例如mysqlslap
、sysbench
等。
mysqlslap
是MySQL5.1.4之后自带的benchmark基准测试工具,该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。
其中,sysbench
比mysqlslap
更通用、更强大,本文将给大家介绍如何使用sysbench来开展基准测试,之所以说它是测试神器,是因为除了能对利用它对各类基础设施对象开展基准测试以外,还可以利用它的实现思路帮助我们生成成百上千万的测试数据,往下看,一起来揭秘吧~
5. sysbench基准测试
sysbench
是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况,它主要包括以下几种方式的测试:
- cpu性能
- 磁盘io性能
- 调度程序性能
- 内存分配及传输速度
- POSIX线程性能
- 数据库性能(OLTP基准测试)
目前sysbench主要支持MySQL
,pgsql
,Oracle
这3类数据库
默认支持MySQL,如果需要测试Oracle/PostgreSQL,则在configure时需要加上–with-oracle
或者–with-pgsql
参数.
通过sysbench工具对数据库开展基准测试最大的亮点在于:可以自动帮你在数据库里构造出来大量的数据,你想要多少数据,就自动给你构造出来多少条数据。同时还可以模拟几千个线程并发的访问数据库,模拟使用各种各样的 SQL 语句,包括模拟出来各种事务提交到你的数据库里去,甚至可以模拟出几十万的 TPS 去压测数据库。
6. sysbench基本语法
1、在使用前,先要需要安装,建议在Linux下安装sysbench
yum install -y sysbench
2、sysbench的基本语法如下:
sysbench [options]... [testname] [command]
其中,command是sysbench
要执行的命令,包括prepare
、run
和cleanup
。顾名思义:
- prepare是为测试提前准备数据
- run是执行正式的测试
- cleanup是在测试完成后对数据库进行清理。
testname指定了要进行的测试,在老版本的sysbench中,可以通过--test参数指定测试的脚本;而在新版本中,--test参数已经声明为废弃,可以不使用--test,而是直接指定脚本。
如下两种方法效果是一样的:
sysbench --test=./tests/include/oltp_legacy/oltp.lua
sysbench ./tests/include/oltp_legacy/oltp.lua
测试时使用的脚本为lua脚本,可以使用sysbench自带脚本,也可以自己开发。对于大多数应用,使用sysbench自带的脚本就足够了。不同版本的sysbench中,lua脚本的位置可能不同,可以自己在sysbench路径下使用find命令搜索oltp.lua
。
大多数数据服务都是oltp类型的,如果你不了解什么是oltp,那么大概率你的数据服务就是oltp类型的。
7. sysbench使用实践(一键构建百万级数据)
接下来,给大家演示一下,如何使用sysbench来对MySQL开展基准测试,以及如何利用sysbench
一条命令来构建百万级测试数据。
操作方法:
1、在基准测试prepare准备阶段,先创建默认的测试库,例如sysbench_test
:
mysql> create database sysbench_test; #创建数据库
如此处,创建sysbench_test数据库
2、准备数据,时间比较长,本文主要为了演示方法,因此把table_size设置的小一点
sysbench /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=100 --mysql-user=root --mysql-password=xxx --mysql-host=192.168.0.103 --mysql-port=3306 --mysql-db=sysbench_test prepare
其中,几个关键参数:
--tables
:指定生成表的数量,此处设置了5张表,表明生成5张测试表,读者可根据实际需要,调整此值。--table_size
:指定生成表中生成的数据量,上述例子,表明每张表生成100条测试数据,实际可以根据需要调整引值,比如调整为:1000000,即代表生成一百万条测试数据。--mysql-db
: 连接的测试数据库名称。其它几项参数较为简单,就不一一介绍了。
执行上述命令后,输出如下:
命令执行成功后,可以打开数据库查看生成的数据是否和设置的对应:
可以看到,已经自动生成了100条测试数据了,如果需要一键成生成百万条测试数据,只需要将--table_size=100
修改为 --table_size=1000000
即可。
3、选择一个lua脚本进行测试,如验证读写性能,执行命令如下:
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-user=root --mysql-password=xxx --mysql-host=192.168.0.103 --mysql-port=3306 --mysql-db=sysbench_test --tables=5 --table_size=100 --threads=10 --time=30 --report-interval=3 run
上述命令,表明使用了10个并发线程数,执行时间为30秒,每3秒输出一次测试信息。实际读者可以将--threads=10
和--time=30
值调大一些。
输出信息类似如下:
其中,对于我们比较重要的信息包括:
queries
:查询总数及qpstransactions
:事务总数及tpsLatency-95th percentile
:前95%的请求的响应时间。
4、执行完测试,拿到所需要的测试结后,最后一步,记得要清理数据,否则后面的测试可能会受到影响。
sysbench /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=100 --mysql-user=root --mysql-password=xxx --mysql-host=192.168.0.103 --mysql-port=3306 --mysql-db=sysbench_test cleanup
########sample3
https://blog.csdn.net/weixin_49114503/article/details/120075455
MySQL Workbench:Error Code: 2013. Lost connection to MySQL server during query解决办法
MySQL server during query解决办法
附言:workbench默认语句执行超时时间为30秒,若一条语句执行时间超过30秒,则会抛出如上所述错误。
下面讲解下如何在workbench中配置超时时间。
打开workbench–>Edit->Preference->SQL Editor
将下图DBMS connection read time out(in seconds)适当调大:
修改配置后需要重启workbench使配置生效
————————————————
版权声明:本文为CSDN博主「五月天的尾巴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_49114503/article/details/120075455
#########sample 4 测试实际用例
##测试方案
step 1:生成一个千万级别的大表。
sysbench --version
sysbench --help
--tables:指定生成表的数量,此处设置了1张表,表明生成1张测试表,读者可根据实际需要,调整此值。
--table_size:指定生成表中生成的数据量,上述例子,表明每张表生成100条测试数据,实际可以根据需要调整引值,比如调整为:1000000,即代表生成一百万条测试数据。
--mysql-db: 连接的测试数据库名称。其它几项参数较为简单,就不一一介绍了。
-
create database sysbench_test;
sysbench /usr/share/sysbench/oltp_read_write.lua --tables=1 --table_size=10000000 --mysql-user=root --mysql-password=Admin --mysql-host=25.10.1.1 --mysql-port=3306 --mysql-db=sysbench_test prepare
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)
结果如下:
Creating table 'sbtest1'...
Inserting 10000000 records into 'sbtest1'
Inserting 10000000 records into 'sbtest1'
Creating a secondary index on 'sbtest1'...
step2:测试10个并发,对该大表进行dml操作,观察qps,和tps 的数量
上述命令,表明使用了10个并发线程数,执行时间为30秒,每3秒输出一次测试信息。实际读者可以将--threads=10和--time=30值调大一些。
测试事务处理数,和读写数
[root@sdwsmn2 metastore]# sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-user=root --mysql-password=Admin --mysql-host=25.10.1.1 --mysql-port=3306 --mysql-db=sysbench_test --tables=1 --table_size=10000000 --threads=10 --time=30 --report-interval=3 run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)
Initializing worker threads...
Threads started!
[ 3s ] thds: 10 tps: 112.58 qps: 2292.82 (r/w/o: 1612.03/286.77/394.02) lat (ms,95%): 204.11 err/s: 0.00 reconn/s: 0.00
[ 6s ] thds: 10 tps: 109.01 qps: 2196.26 (r/w/o: 1532.18/278.37/385.71) lat (ms,95%): 244.38 err/s: 0.00 reconn/s: 0.00
[ 9s ] thds: 10 tps: 91.00 qps: 1776.97 (r/w/o: 1242.98/226.33/307.66) lat (ms,95%): 390.30 err/s: 0.00 reconn/s: 0.00
SQL statistics:
queries performed:
read: 2638920 #总的select数量
write: 0
other: 0
total: 2638920
transactions: 2638920 (26382.71 per sec.) #TPS
queries: 2638920 (26382.71 per sec.) #QPS
ignored errors: 0 (0.00 per sec.) #忽略的错误
reconnects: 0 (0.00 per sec.) #重新连接
Throughput:
events/s (eps): 26382.7081 #每秒的事件数,一般和TPS一样
time elapsed: 100.0246s #测试的总时间
total number of events: 2638920 #总的事件数,一般和TPS一样
Latency (ms):
min: 0.11 #最小响应时间
avg: 4.85 #平均响应时间
max: 649.29 #最大响应时间
95th percentile: 25.74 #95%的响应时间是这个数据
sum: 12796148.28
step3: 清理数据
清理数据
sysbench /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=100 --mysql-user=root --mysql-password=xxx --mysql-host=192.168.0.103 --mysql-port=3306 --mysql-db=sysbench_test cleanup
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)
Dropping table 'sbtest1'..