首页 > 其他分享 >作为DBA,你需要掌握这些压测工具

作为DBA,你需要掌握这些压测工具

时间:2024-01-19 09:57:12浏览次数:22  
标签:10 掌握 DBA 0.00 seconds number 压测 queries --

前言:

数据库系统正式上线前,压测是必不可少的一步。数据库系统能承载多少并发,DBA要做到心中有数。

基本概念:

TPS/QPS:衡量吞吐量。(TPS:每秒事务处理量(Transaction Per Second)、每秒查询率QPS(Query Per Second)是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准)

响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。。

并发量:同时处理的查询请求的数量。

mysqlslap
mysqlslap 是 DBA 人员应该掌握的常见压力测试工具之一,是 MySQL 从 5.1.4 版开始官方自带的一个压力测试工具。它通过模拟多个并发客户端访问 MySQL 来执行压力测试,我们通过结果信息可以了解数据库的性能状况。通过 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
命令选项:
  • --concurrency 并发数量。

  • --engines 要测试的引擎。

  • --iterations 测试次数。

  • --auto-generate-sql 用系统自己生成的 SQL 脚本来测试。

  • --auto-generate-sql-add-autoincrement 使用自增字段。

  • --auto-generate-sql-load-type 测试模式(read,write,update,mixed)。

  • --number-of-queries 全部查询的次数。

  • --debug-info 额外输出CPU以及内存的相关信息,需要开启 Debug 模式。

  • --number-int-cols 测试表 int 型字段数量。

  • --number-char-cols 测试表 char 型字段数量。

  • --create-schema 测试的 db。

  • --query 使用自己的 SQL 脚本执行测试。

  • --no-defaults 禁止使用默认设置。

  • --only-print 仅打印查询语句。

可以使用 --only-print 先看看自动生成的 SQL 是怎样的,如果不满意可以使用自己的 SQL 脚本。

单机读并发测试

这里用的是 Docker 中的 MySQL 服务器,因此性能会相比主机运行 MySQL 要差些。
100 并发:
mysqlslap --no-defaults --iterations=5 --concurrency=100 --number-of-queries=2000 --auto-generate-sql --number-int-cols=10 --number-char-cols=10 --auto-generate-sql-load-type=read -uroot -h 127.0.0.1 -p123456 
mysqlslap: [Warning] Using a password on the command line interface can be insecure. 
Benchmark
         Average number of seconds to run all queries: 10.662 seconds         
         Minimum number of seconds to run all queries: 10.141 seconds         
         Maximum number of seconds to run all queries: 11.484 seconds         
         Number of clients running queries: 100         
         Average number of queries per client: 20 

500 并发:
mysqlslap --no-defaults --iterations=5 --concurrency=500 --number-of-queries=10000 --auto-generate-sql --number-int-cols=10 --number-char-cols=10 --auto-generate-sql-load-type=read -uroot -h 127.0.0.1 -p123456 
mysqlslap: [Warning] Using a password on the command line interface can be insecure. 
Benchmark
         Average number of seconds to run all queries: 51.981 seconds         
         Minimum number of seconds to run all queries: 51.454 seconds         
         Maximum number of seconds to run all queries: 52.500 seconds         
         Number of clients running queries: 500         
         Average number of queries per client: 20 

1000 并发:
mysqlslap --no-defaults --iterations=5 --concurrency=1000 --number-of-queries=20000 --auto-generate-sql --number-int-cols=10 --number-char-cols=10 --auto-generate-sql-load-type=read -uroot -h 127.0.0.1 -p123456 
mysqlslap: [Warning] Using a password on the command line interface can be insecure. 
Benchmark
         Average number of seconds to run all queries: 102.453 seconds         
         Minimum number of seconds to run all queries: 102.016 seconds         
         Maximum number of seconds to run all queries: 102.797 seconds         
         Number of clients running queries: 1000         
         Average number of queries per client: 20 
         
1500 并发:
mysqlslap --no-defaults --iterations=5 --concurrency=1500 --number-of-queries=30000 --auto-generate-sql --number-int-cols=10 --number-char-cols=10 --auto-generate-sql-load-type=read -uroot -h 127.0.0.1 -p123456 
mysqlslap: [Warning] Using a password on the command line interface can be insecure. 
Benchmark
         Average number of seconds to run all queries: 157.340 seconds         
         Minimum number of seconds to run all queries: 155.532 seconds         
         Maximum number of seconds to run all queries: 163.485 seconds         
         Number of clients running queries: 1500         
         Average number of queries per client: 20 

2000 并发:
mysqlslap --no-defaults --iterations=5 --concurrency=2000 --number-of-queries=40000 --auto-generate-sql --number-int-cols=10 --number-char-cols=10 --auto-generate-sql-load-type=read -uroot -h 127.0.0.1 -p123456 
mysqlslap: [Warning] Using a password on the command line interface can be insecure. 
Benchmark
         Average number of seconds to run all queries: 213.437 seconds         
         Minimum number of seconds to run all queries: 208.406 seconds         
         Maximum number of seconds to run all queries: 222.453 seconds         
         Number of clients running queries: 2000         
         Average number of queries per client: 20 

各并发度下的表现为:

sysbench
sysbench是一款非常强大的数据库测试工具,它可以执行多种类型的基准测试,支持MySQL、PostgreSQL、Oracle等多种数据库。
sysbench 支持以下几种测试模式:
1、CPU 运算性能
2、磁盘 IO 性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX线程性能–互斥基准测试
6、数据库性能(OLTP基准测试)以下命令可以输出各个检测项的帮助文档

# IO
sysbench  --test=fileio help
# CPU
sysbench  --test=cpu help
# 内存
sysbench  --test=memory help
# 线程
sysbench  --test=threads help
# 互斥性能
sysbench  --test=mutex help
# 事务处理
sysbench --test=oltp help
安装
下载:
wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip"
unzip sysbench-1.0.zip
cd sysbench-1.0

安装依赖:
yum install automake libtool –y

编译安装:
./autogen.sh
./configure
make
make install

验证:
sysbench --version
sysbench 1.0.9
命令选项:
  • --mysql-host:MySQL服务器主机名。

  • --mysql-port:MySQL服务器端口。

  • --mysql-user:用户名。

  • --mysql-password:密码。

  • --oltp-test-mode:执行模式,包括simple、nontrx和complex,默认是complex。simple模式下只测试简单的查询;nontrx不仅测试查询,还测试插入更新等,但是不使用事务;complex模式下测试最全面,会测试增删改查,而且会使用事务。

  • --oltp-tables-count:测试的表数量,根据实际情况选择。

  • --oltp-table-size:测试的表的大小,根据实际情况选择。

  • --threads:客户端的并发连接数。

  • --time:测试执行的时间,单位是秒,该值不要太短,可以选择120。

  • --report-interval:生成报告的时间间隔,单位是秒,如10。


针对OLTP的基准测试

1. 首先生成测试数据。使用了10个表,每个表有10万条数据,客户端的并发线程数为10,执行时间为120秒,每10秒生成一次报告。
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=admin --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 prepare         
2. 执行测试,将测试结果导出到文件中,便于后续分析。
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=admin --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 run >> /root/test/mysysbench.log
3.清理数据
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=admin --mysql-password=123456 cleanup
sysbench 1.0.14 (using bundled LuaJIT 2.1.0-beta2)

Dropping table 'sbtest1'...
测试结果如下:
sysbench 1.0.14 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 10
Report intermediate results every 10 second(s)
Initializing random number generator from current time

Initializing worker threads...

--线程启动
Threads started!
-- 每10秒钟报告一次测试结果,tps、每秒读、每秒写、99%以上的响应时长统计
[ 10s ] thds: 10 tps: 956.45 qps: 19139.38 (r/w/o: 13399.56/3825.92/1913.91) lat (ms,95%): 29.72 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 10 tps: 989.71 qps: 19804.24 (r/w/o: 13862.17/3962.55/1979.52) lat (ms,95%): 28.67 err/s: 0.10 reconn/s: 0.00
[ 30s ] thds: 10 tps: 995.44 qps: 19909.03 (r/w/o: 13936.11/3982.05/1990.87) lat (ms,95%): 27.66 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 10 tps: 983.30 qps: 19660.90 (r/w/o: 13764.23/3930.08/1966.59) lat (ms,95%): 27.66 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 10 tps: 994.20 qps: 19882.58 (r/w/o: 13918.26/3975.92/1988.41) lat (ms,95%): 29.19 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 10 tps: 982.50 qps: 19648.18 (r/w/o: 13752.56/3930.82/1964.81) lat (ms,95%): 28.16 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 10 tps: 981.10 qps: 19624.20 (r/w/o: 13737.80/3924.00/1962.40) lat (ms,95%): 29.19 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 10 tps: 991.69 qps: 19837.87 (r/w/o: 13885.81/3968.67/1983.39) lat (ms,95%): 27.17 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 10 tps: 1007.34 qps: 20142.36 (r/w/o: 14100.50/4027.27/2014.59) lat (ms,95%): 26.68 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 10 tps: 1009.76 qps: 20195.17 (r/w/o: 14135.79/4039.75/2019.63) lat (ms,95%): 26.20 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 10 tps: 1003.80 qps: 20077.42 (r/w/o: 14053.54/4016.28/2007.59) lat (ms,95%): 25.74 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 10 tps: 984.30 qps: 19685.77 (r/w/o: 13781.75/3935.41/1968.61) lat (ms,95%): 28.67 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            1663326 --读总数
        write:                           475233 -- 写总数  
        other:                           237617 -- 其他操作总数(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等)  
        total:                           2376176 -- 全部总数
    transactions:                        118808 (989.85 per sec.) -- 总事务数(每秒事务数)
    queries:                             2376176 (19797.13 per sec.)
    ignored errors:                      1      (0.01 per sec.) --总忽略错误总数(每秒忽略错误次数)
    reconnects:                          0      (0.00 per sec.) --重连总数(每秒重连次数)

General statistics: --常规统计
    total time:                          120.0244s --总耗时
    total number of events:              118808 --共发生多少事务数

Latency (ms):
         min:                                    6.08 --最小耗时
         avg:                                   10.10 --平均耗时
         max:                                   87.65 --最长耗时
         95th percentile:                       28.16 --超过95%平均耗时
         sum:                              1199522.76
Threads fairness: --并发统计
    events (avg/stddev):           11880.8000/273.15 --总处理事件数/标准偏差
    execution time (avg/stddev):   119.9523/0.00 --总执行时间/标准偏差

其中,对于我们比较重要的信息包括:queries:查询总数及qps
transactions:事务总数及tps
Latency-95th percentile:前95%的请求的最大响应时间,本例中是28.16毫秒。

标签:10,掌握,DBA,0.00,seconds,number,压测,queries,--
From: https://www.cnblogs.com/shujuyr/p/17973975

相关文章

  • 一文掌握Vue3函数式组件中的confirm实现技巧!
    在做后台项目时候,使用声明式组件比较多,就是写一个.vue文件,在里面写template、script、style哪里需要,就在哪里导入。而对于前台项目而言,我们期望可以直接通过方法的形式调用,利用函数式组件,在封装时除了要写.vue,还要多一个手动渲染和卸载的步骤。我们可以通过h函数可以生成一个vno......
  • 掌握 C# 变量:在代码中声明、初始化和使用不同类型的综合指南
    C#变量变量是用于存储数据值的容器。在C#中,有不同类型的变量(用不同的关键字定义),例如:int-存储整数(没有小数点的整数),如123或-123double-存储浮点数,有小数点,如19.99或-19.99char-存储单个字符,如'a'或'B'。Char值用单引号括起来string-存储文本,如"Hello......
  • 入门Linux运维工程师需要掌握的知识点和工具以及技能
    Linux系统的学习,可以选用redhat或centos,特别是centos在企业中用得最多,当然还会有其它版本的,比如Ubuntu等,根据自己的工作情况和兴趣来定。当然不同发行版本主要是包上的区别以及一些命令的差异,其他内核上的东西都大同小异。对于刚入门或准备入门Linux运维的来说,整理总结了以下10个......
  • 掌握Spring缓存-全面指南与最佳实践
    第1章:引言大家好,我是小黑,咱们今天来聊聊缓存,在Java和Spring里,缓存可是个大角色。咱们在网上购物,每次查看商品详情时,如果服务器都要去数据库里翻箱倒柜,那速度得慢成什么样?这就是缓存发光发热的时刻。缓存就像是服务器的“小抽屉”,把经常用到的数据放在里面,下次需要的时候,直接从“......
  • 使用shell脚本将doDBA采集到的日志会话信息导入到MySQL数据库
    【背景说明】使用doDBA工具监控的会话信息导入到MySQL数据库的表中【环境说明】doDBA工具采集会话信息(之前有脚本说明)【脚本说明】处理dodba日志信息将日志的innodb日志信息去除审计日志的名称要改为原来的dodba.log名称cd/data/backup/doDBA/log/cpdodba_20231226_09......
  • jmeter并发与持续压测生成测试报告操作日志
    接口压测的方式:1、同时并发:设置线程组、执行时间、循环次数,这种方式可以控制接口请求的次数2、持续压测:设置线程组、循环次数,勾选“永远”,调度器(持续时间),这种方式可以控制压测周期时间指定并发数 例1:设置线程数:10;设置执行时间:0;设置循环次数:5说明:使10个线程启动并同时运......
  • docker jmeter分布式压测部署 jmeter websocket压测
    测试场景:1.多名用户加入房间。2.房间人数为固定人数(比如4人) 3.有人进入时,进入用户会收到反馈当前房间人员列表。4.其他人会收到反馈新加入用户的信息消息。5.当人数已满时,会自动推送消息给所有人。6.在人满后,每个人需要按固定序列,发送消息。7.所有人发送特定消息后,推进房......
  • java调用jmeter集群服务压力测试 jmeter数据库压测
    目录〇、前言。一、jmeter工具安装。二、数据库驱动插件jar包安装。三、脚本开发与调试。四、加压设置。五、数据监听。  正文〇、前言。依据云栖大会项目部分数据库压测经验编写。一、jmeter工具安装。1、Apache官网下载地址:https://jmeter.apache.org/download_j......
  • jmeter压测网站、数据库、接口及分布式压测
    Jmeter是apache组织开发的基于java的压力测试工具。Jmeter可以用于对服务器、网络活对象模拟巨大的负载,来自不同压力类别下测试他们的强度和分析整体性能。另外,jmeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活......
  • 怎么让生产环境的全链路压测不影响正常业务呢?
    时间上:挑选用户少的时间进行压测     技术上:对业务代码进行改造,使业务服务代码能够处理压测标记,通过压测标记把数据写入影子库、影子表、影子消息队列、影子缓存传递压测标记时,确保压测标记不丢失、不中断、压测数据不污染。压测标记不丢失:客户端发送http请求时带上......