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

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

时间:2023-12-22 09:02:51浏览次数:38  
标签: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-autoincrementEnter 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基准测试)以下命令可以输出各个检测项的帮助文档

# IOsysbench  --test=fileio help# CPUsysbench  --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.zipcd sysbench-1.0
安装依赖:yum install automake libtool –y
编译安装:./autogen.sh./configuremakemake install
验证:sysbench --versionsysbench 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 cleanupsysbench 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: 10Report 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.00SQL 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.76Threads 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/ataoxz/p/17920509.html

相关文章

  • 做运营,一定要掌握的3个底层能力+3个核心思维
    从用研转做运营已经3年多了,也经历过大大小小的业务项目,回顾这3年,总结一句话就是:如果你不掌握运营的底层能力,看再多的方法论,也只是别人的。最初做运营,我相信很多人都会有同样的感受:怎么感觉运营就一直在打杂,也没有人带,看了那么多课程、书籍上的方法论,可是总不会用。运营的分类那......
  • 【ECMAScript】提高JavaScript编程效率:掌握ES8的新特性和语法
    前言ECMAScript8,也称为ES8或ES2017,是JavaScript语言的最新标准。它在ES6的基础上进一步扩展了JavaScript的功能,为开发者提供了更多的工具和语法来编写高效、可维护的代码。本篇博客将详细介绍ES8的各种新特性及其用法,帮助读者更好地了解和掌握这个强大的语言标准。正文内容1.......
  • 使用阿里云性能测试工具 JMeter 场景压测 RocketMQ 最佳实践
    作者:森元需求背景新业务上线前,我们通常需要对系统的不同中间件进行压测,找到当前配置下中间件承受流量的上限,从而确定上游链路的限流规则,保护系统不因突发流量而崩溃。阿里云PTS的JMeter压测可以支持用户上传自定义的JMeter脚本,按照自定义的逻辑,借助PTS强大的分布式压测能力......
  • 使用阿里云性能测试工具 JMeter 场景压测 RocketMQ 最佳实践
    作者:森元需求背景新业务上线前,我们通常需要对系统的不同中间件进行压测,找到当前配置下中间件承受流量的上限,从而确定上游链路的限流规则,保护系统不因突发流量而崩溃。阿里云PTS的JMeter压测可以支持用户上传自定义的JMeter脚本,按照自定义的逻辑,借助PTS强大的分布式压测......
  • 使用redbaron删除删除一个.py文件的所有注释,输出到一个新.py文件,文件名加上_nocmts后
    BUG:目前输出的文件中可能会出现缩进错误,待修改。fromredbaronimportRedBarondefremove_comments_with_redbaron(source_py_file,keep_blank_lines):withopen(source_py_file,'r',encoding='utf-8')asfile:red=RedBaron(file.read())co......
  • 几款Linux性能监控工具掌握
    推荐几款可以涨姿势的运维实用工具~点击关注......
  • Feedback Control of Dynamic Systems_P1
    GLOBALEDITION1.FeedbackControlofDynamicSystemsEIGHTHEDITIONFranklin\(\cdot\)Powell\(・\)Emami-NaeiniTableofLaplaceTransformsNumber$$F(s)$$$$f(t),t\geq0$$11$$\delta(t)$$2$$\frac{1}{s}$$$$1(t)$$3$$\frac{1}{s......
  • Feedback Control of Dynamic Systems_P2
    187.ProblemsforSection5.4:DesignUsingDynamicCompensation5.21Let\[G(s)=\frac{1}{s^{2}+7s+12}\\text{~}\text{and}\text{~}\D_{c}(s)=K\frac{(s+a)}{s+b}\]Usingroot-locustechniques,findthevaluesfortheparameters\(a,b\......
  • 阅读笔记《掌握需求过程》2
    这次我们从第三章开始看,项目启动有关的事项。这一章包含12小节,即icebreaker项目(就是本书中为了方便读者理解需求过程,始终贯穿的实例),产品目标——我们需要该产品的原因是什么,谁为它付钱:客户和顾客,用户——理解他们,风险承担者和顾问,需求限制条件,为您的宝宝命名,设定范围,该产品的成本......
  • 通过 Sysbench 在低配置低数据基础上分别压测 MySQL 和 TiDB,实际结果 TiDB 出乎我的想
    作者:tidb菜鸟一只背景最近要上一个新项目,原来提供的是一个主从mysql数据库,两台16C64G的主机(还有个预发环境也是mysql主从,2个4C8G主机),感觉不是很靠谱,所以想要切换成tidb,所以对两边进行了压测(包括预发),两边磁盘都是垃圾机械盘,性能不说了,但是两边都垃圾,对比数据还是比较靠谱的。......