更新时间:2022-01-21 16:56:11
我来给大家详细讲解一下MySQL基准测试和sysbench工具。相信朋友们也应该密切关注这个话题。现在,我给朋友们详细讲解一下MySQL基准测试和sysbench工具。边肖还收集了关于MySQL基准测试和sysbench工具的详细说明的相关信息。我希望你看到后会喜欢。
相关学习建议:mysql教程
什么是基准测试?
数据库基准测试是对数据库性能指标的一种定量的、可重复的、可比较的测试。基准测试和压力测试基准测试可以理解为对系统的一种压力测试。然而,基准测试并不关心业务逻辑是否更简单、更直接、更容易测试。数据可以由工具生成而不真实。然而,压力测试通常认为业务逻辑(如购物车业务)需要真实的数据。
基准测试的作用
对于大多数Web应用来说,整个系统的瓶颈在于数据库;原因很简单:Web应用中的其他因素,比如网络带宽、负载均衡节点、应用服务器(包括CPU、内存、硬盘灯、连接数等。)和缓存,可以通过横向扩展(俗称加机)轻松实现性能提升。对于MySQL来说,由于数据一致性的要求,将数据写入数据库的压力无法通过增加机器来分散。虽然可以通过预缓存(Redis等)降低压力。),读写分离,子数据库和子表,与系统其他组件的横向扩展相比,实在是太有限了。
数据库的基准测试是分析数据库在当前配置(包括硬件配置、OS、数据库设置等)下的性能。)从而找出MySQL的性能阈值,并根据实际系统需求调整配置。
基准测试指数
常见的数据库指标包括:
TPS/QPS:测量吞吐量。响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等。其中,时间百分比是指前95%等意义较大的请求的最大响应时间。并发数量:同时处理的查询请求数。
基准测试的分类
有两种方法可以对MySQL进行基准测试:
整个系统的基准测试:通过http请求进行测试,如浏览器、APP或邮递员。该方案的优点是可以更好地测试整个系统,结果更准确。缺点是设计复杂,实现困难。只针对MySQL的基准测试:优点和缺点正好与针对整个系统的测试相反。
在对MySQL进行基准测试时,一般使用mysqlslap、sysbench等专用工具。其中,sysbench比mysqlslap更通用、更强大、更适合Innodb(因为它模拟了Innodb的很多IO特性)。下面是用sysbench进行基准测试的方法。
sysbench简介
Sysbench是一个跨平台的基准测试工具,支持多线程和多个数据库。主要包括以下测试:
m-font, BlinkMacSystemFont, "background-color:#FFFFFF;font-size:14px;color:#3F3F3F;"> 1.cpu性能2.磁盘io性能3.调度程序性能4.内存分配及传输速度5.POSIX线程性能6.数据库性能(OLTP基准测试)7.本文主要介绍对数据库性能的测试。 sysbench安装本文使用的环境时CentOS 6.5;在其他Linux系统上的安装方法大同小异。MySQL版本是5.6。
1.下载解压 wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip" unzip sysbench-1.0.zip cd sysbench-1.0 2.安装依赖 yum install automake libtool –y 3.安装 安装之前确保位于之前解压的sysbench目录中。 ./autogen.sh ./configure export LD_LIBRARY_PATH=/usr/local/mysql/include #这里换成机器中mysql路径下的include make make install 4.安装成功 [[email protected] sysbench-1.0]# sysbench --version sysbench 1.0.9 sysbench语法执行sysbench –help可以看到sysbench的详细使用方法。sysbench的基本语法如下:
sysbench [options]... [testname] [command]下面说明实际使用中常用的参数和命令。
1.command command是sysbench要执行的命令包括prepare、run和cleanup顾名思义prepare是为测试提前准备数据run是执行正式的测试cleanup是在测试完成后对数据库进行清理。
2.testname 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。P.S.:大多数数据服务都是oltp类型的如果你不了解什么是oltp那么大概率你的数据服务就是oltp类型的。
3.options sysbench的参数有很多其中比较常用的包括: MySQL连接信息参数:
1.--mysql-host:MySQL服务器主机名默认localhost;如果在本机上使用localhost报错提示无法连接MySQL服务器改成本机的IP地址应该就可以了。2.--mysql-port:MySQL服务器端口默认33063.--mysql-user:用户名4.--mysql-password:密码
MySQL执行参数:
1.--oltp-test-mode:执行模式包括simple、nontrx和complex默认是complex。simple模式下只测试简单的查询;nontrx不仅测试查询还测试插入更新等但是不使用事务;complex模式下测试最全面会测试增删改查而且会使用事务。可以根据自己的需要选择测试模式。2.--oltp-tables-count:测试的表数量根据实际情况选择3.--oltp-table-size:测试的表的大小根据实际情况选择4.--threads:客户端的并发连接数5.--time:测试执行的时间单位是秒该值不要太短可以选择1206.--report-interval:生成报告的时间间隔单位是秒如10
sysbench使用举例在执行sysbench时应该注意:
1.尽量不要在MySQL服务器运行的机器上进行测试一方面可能无法体现网络(哪怕是局域网)的影响另一方面sysbench的运行(尤其是设置的并发数较高时)会影响MySQL服务器的表现。2.可以逐步增加客户端的并发连接数(--thread参数)观察在连接数不同情况下MySQL服务器的表现;如分别设置为10,20,50,100等。3.一般执行模式选择complex即可如果需要特别测试服务器只读性能或不使用事务时的性能可以选择simple模式或nontrx模式。4.如果连续进行多次测试注意确保之前测试的数据已经被清理干净。
下面是sysbench使用的一个例子:
1.准备数据
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 prepare
其中执行模式为complex使用了10个表每个表有10万条数据客户端的并发线程数为10执行时间为120秒每10秒生成一次报告。
2.执行测试 将测试结果导出到文件中便于后续分析。
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 run >> /home/test/mysysbench.log3.清理数据 执行完测试后清理数据否则后面的测试会受到影响。
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 cleanup 测试结果
测试结束后查看输出文件如下所示:
其中对于我们比较重要的信息包括:queries:查询总数及qps transactions:事务总数及tps Latency-95th percentile:前95%的请求的最大响应时间本例中是344毫秒这个延迟非常大是因为我用的MySQL服务器性能很差;在正式环境中这个数值是绝对不能接受的。
建议下面是使用sysbench的一些建议。
1.在开始测试之前应该首先明确:应采用针对整个系统的基准测试还是针对MySQL的基准测试还是二者都需要。2.如果需要针对MySQL的基准测试那么还需要明确精度方面的要求:是否需要使用生产环境的真实数据还是使用工具生成也可以;前者实施起来更加繁琐。如果要使用真实数据尽量使用全部数据而不是部分数据。3.基准测试要进行多次才有意义。4.测试时需要注意主从同步的状态。5.测试必须模拟多线程的情况单线程情况不但无法模拟真实的效率也无法模拟阻塞甚至死锁情况。
想了解更多编程学习敬请关注php培训栏目!
以上就是MySQL基准测试和sysbench工具的详解的详细内容!
来源:php中文网