作为dba,你不得不掌握的压测工具

dbLenis dbLenis     2023-01-01     209

关键词:

mysqlslap


    mysqlslap是MySQL自带的一个用于实现负载性能测试和压力测试的工具。它可以模拟多个客户端对数据库进行施压,并生成报告来了解数据库的性能状况。

mysqlslap的运行过程主要分三步:

  1. 创建库、表,导入数据用于测试。此过程由单线程完成。

  2. 开始进行压力测试。该步骤可以使用多线程完成。

  3. 清理测试数据。此过程由单线程完成。

下面举几个例子来说明下如何使用mysqlslap。

1. 自动生成测试表,其中会生成自增列,采用单线程进行测试。

[root@node1 ~]# mysqlslap -uroot -p --auto-generate-sql --auto-generate-sql-load-type=mixed --auto-generate-sql-add-autoincrement
Enter password:
Benchmark
#运行所有语句的平局时间,单位秒
Average number of seconds to run all queries: 0.018 seconds
#运行所有语句的最小秒数
Minimum number of seconds to run all queries: 0.018 seconds
#运行所有语句的最大秒数
Maximum number of seconds to run all queries: 0.018 seconds
#客户端数量
Number of clients running queries: 1
#每个客户端运行查询的平均数
Average number of queries per client: 0

参数解释:

--auto-generate-sql:自动生成测试表和数据,mysqlslap工具自己生成sql脚本进行测试。

--auto-generate-sql-load-type:指定测试语句的类型。取值包括:read,key,write,update和mixed(默认)。

--auto-generate-sql-add-autoincrement:生成的表中会添加自增列。

2. 指定客户端的数量以及总的查询次数

mysqlslap -uroot -p --auto-generate-sql --auto-generate-sql-load-type=mixed --concurrency=100 --number-of-queries=1000

--concurrency=100:指定同时有100个客户端连接
--number-of-queries=1000:指定总的测试查询次数,该值除以concurrency的值就是每个客户端执行的查询次数。

3. 自定义表结构以及SQL语句,指定50个客户端,运行测试200次

mysqlslap --delimiter=";" --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)" --query="SELECT * FROM a" --concurrency=50 --iterations=200

--iterations:代表要运行测试多少次。

4. 使用参数指定列的数量和类型,比如int类型的字段两列,varchar类型的字段3列。

mysqlslap -uroot -p --concurrency=5 --iterations=20 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql

5. 从指定文件中加载create、insert、和select语句,当文件中有多条语句时用”;”隔开。

mysqlslap --concurrency=5 --iterations=5 --query=query.sql --create=create.sql --delimiter=";"

sysbench


    sysbench是一款非常强大的数据库测试工具,它可以执行多种类型的基准测试,目前主要支持MySQL、PostgreSQL、Oracle这3种数据库。

它可以从https://github.com/akopytov/sysbench下载源码包。

安装

cd sysbench-0.5
./autogen.sh
./configure --prefix=/usr/local/sysbench --build=x86_64
make && make install
cp /usr/local/sysbench/bin/sysbench /usr/bin/
验证sysbench安装是否成功。
[root@node1 ~]# sysbench --version
sysbench 0.5

针对CPU的基准测试

测试计算素数直到某个最大值所需要的时间。

[root@node1 ~]# sysbench --test=cpu --cpu-max-prime=2000 run
sysbench 0.5:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Random number generator seed is 0 and will be ignored
…………………………
General statistics:
total time:                          1.1302s
…………………………….

针对内存的基准测试

sysbench --test=memory --memory-block-size=8k --memory-total-size=100G run

针对文件IO的基准测试

1. 首先生成测试文件:随机写128个文件,共计2G

sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw prepare

2. 随机读取测试⽂件,查看耗费的时间

sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw run

其中--file-test-mode的选项如下:

seqwr:顺序写入

seqrewr:顺序重写

seqrd:顺序读取

rndrd:随机读取

rndwr:随机写入

rndrw:混合随机读写

3. 测试完成,清理测试数据

sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw cleanup

针对OLTP的基准测试

1. 首先生成测试数据,下面生成一张数据量百万行记录的表。

sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=root prepare

查询生成的测试数据:

mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+

2. 进行读取验证,采用8个并发线程,开启只读模式

sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=root --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run

测试结果如下:

OLTP test statistics:
    queries performed:
        read:                            407498
        write:                           0
        other:                           58214
        total:                           465712
    transactions:                        29107  (485.07 per sec.)
    read/write requests:                 407498 (6790.91 per sec.)
    other operations:                    58214  (970.13 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)
General statistics:
    total time:                          60.0064s
    total number of events:              29107
    total time taken by event execution: 479.9865s
    response time:
         min:                                  1.55ms
         avg:                                 16.49ms
         max:                                539.30ms
         approx.  95 percentile:              25.98ms
Threads fairness:
    events (avg/stddev):           3638.3750/42.84
    execution time (avg/stddev):   59.9983/0.00

其中transactions代表了测试结果的主要评判标准,即TPS,上述测试结果中的tps是485.7,response time中展示了响应时间的统计信息,展示了最小、最大、平均响应时间,以及95%百分比的响应时间。

3. 清理测试数据

sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=root cleanup

推荐一款es轻量级的压测工具(代码片段)

...多参数,主要是读写的速度。有一点,这是基准的压测,不能很好的模拟线上的同事读写某个比例的情况。二loadgen相对于esrally 查看详情

jmeter在服务器上的压测命令

...式进行负载测试,仅用于测试创建和测试调试!所以jmeter的压测命令很简单:jmeter-n-t[jmx文件]-l[结果文件]-e-o[输出文件夹的路径]例如: 查看详情

阿昌教你在数据库的压测过程中,如何360度无死角观察机器性能(代码片段)

阿昌教你数据库的压测过程中,如何360度无死角观察机器性能一、前言之前的文章,我们使用sysbench这个工具非常方便的去对数据库进行压测;那我们如果在压测的同时,查看直接机子的性能情况呢???二... 查看详情

hadoop的压测

#测试写能力hadoopjarshare/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.1-tests.jarTestDFSIO-write-nrFiles1-fileSize128MB#写速度hadoopjarshare/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.1 查看详情

推荐一款es轻量级的压测工具(代码片段)

...多参数,主要是读写的速度。有一点,这是基准的压测,不能很好的模拟线上的同事读写某个比例的情况。二loadgen相对于esrally只看es的整体指标。loadgen就简单好用多了。下载,解压,修改loadgen.yml即可。下载... 查看详情

golang的压测工具hey(代码片段)

BenchmarkStringJoin1-43000004351ns/op32B/op2allocs/op-4表示4个CPU线程执行;300000表示总共执行了30万次;4531ns/op,表示每次执行耗时4531纳秒;32B/op表示每次执行分配了32字节内存;2allocs/op表示每次执行分配了2次对象https://github.com/rakyll/hey-n... 查看详情

使用jmeter进行简单的压测

安装下载前往官网下载,【地址】环境需要java环境,此处略最好对jmeter配置下环境变量,方便打开,此处略运行启动jmeter进入到bin目录,输入  ./jmeter  启动启动是会给出提示,不要使用GUI模式进行测试,GUI模式仅... 查看详情

2020想进大厂你不得不了解的mysql意外事件的查询技巧

导读:数据库是导致应用系统运行缓慢的常见原因。面对数据库引性能问题,很多开发者或者DBA却束手无策。本文作者经过多年的实际经验,整理了一些材料,将Linux环境下MySQL性能突发事件问题排查技巧分享给大家。作者介绍... 查看详情

jmeter非gui(cmd命令行)模式的压测和输出测试报告

1、非GUI模式的压测,和GUI有啥不同?2、非GUI模式怎么搞?大家打开jmeter的时候,都会看到这个界面:注意看这句话:Don\'tuseGUImodeforloadtesting!,onlyforTestcreationandTestdebugging.意思就是:不要使用GUI模式来进行压力测试!只有在脚本... 查看详情

5.堪比jmeter的.net压测工具-crank实战篇-接口以及场景压测

1.前言通过之前的学习,我们已经掌握了crank的配置以及对应http基准工具bombardier、wrk、wrk2的用法,本篇文章介绍一下如何将其用于实战,在实际的项目中我们如何使用crank来完成压测任务。2.项目背景目前有一个项目&... 查看详情

jmeter实现排除登录对单个事务的压测

需求:用户登录后,会循环请求数据上报,对该请求做一个50用户的并发,并循环执行长达10分钟。循环的时候,需要排除登录的过程。事务:可以是一个接口,可以是一个功能,如一个web页面的访问,可以是一个请求,如循环... 查看详情

翻译你对dba的定义是什么?

...数据库管理员,但是它扮演者一个怎样的角色呢?如果你不得不把它描述给一个非技术人员,你会怎么样说?DBA扮演者很多不同的角色和功能。我曾经见过或使用过一些角色或功能:安装SQL 服务器,管理服务器的性能包括磁... 查看详情

mysql:8在数据库的压测过程中,观察机器性能(代码片段)

...f0c;知道发现数据库的QPS和TPS上不去了。注意:在不停的压测获取更高的QPS和TPS时,还要同步对机器性能表 查看详情

开发的压测文档能有多小心谨慎~(代码片段)

压测文档一、测试内容二、测试方法三、测试目标四、测试环境五、性能测试结果与分析1、同时发送测试性能截图:2、分开发送请求测试:性能总览:第一组对比测试:线程组配置:旧列表压测性能:聚... 查看详情

性能测试整体认知

...、熟悉jvm调优、Tomcat调优等基础策略3、熟悉MySQL数据库,掌握java、Python等至少一门编程语言4、1年独立性能测试经验5、熟悉常见的压测工具:jmeter6、熟悉常用的分析调优工具,如visualvm、youkit、jps、jstat等7、熟悉性能测试的整... 查看详情

python服务器性能测试工具locust使用指南(代码片段)

...梯度增压非http协议压测参考前言locust是一款由python编写的压测工具,可以很好的和python进行结合使用,功能强大。locust文档是英文版的,不利于阅读,本文从文档出发,模拟真实的压测需求与场景,带你... 查看详情

接口压测笔记

...。    上篇记录了Jmeter的简单操作已经接口的压测,这篇是对接口压测做一些记录,我目前完成公司的任务所记录下的表格。步骤:1、先打开我们的Jmeter压测工具,建立一个新的线程组2、在线程组下面建立一个新... 查看详情

jmeter-----随机生成手机号后8位并去重,来进行注册手机号的压测(代码片段)

  要求:对注册接口进行100000次压测,手机号已126开头,后面的8位数不限  前言:在进行测试中,我们需要对注册接口进行压测100000次,那么就要求手机号码每次填写的不一致,否则手机号使用一次后会出现该手机号码已... 查看详情