作为后台开发人员,对数据库进行基准测试是非常有必要的,以掌握数据库的性能。本文介绍了MySQL基准测试的基本概念以及使用sysbench对MySQL进行基准测试的详细方法。数据库的基准测试是对数据库的性能指标进行定量的、可重现的、可比较的测试。基准测试和压力测试基准测试可以理解为对系统的压力测试。而基准测试不关心业务逻辑,更简单、更直接、更容易测试。数据可以通过工具生成,不需要真实数据。压测一般考虑业务逻辑(比如购物车业务),需要真实的数据。基准测试的作用对于大多数Web应用来说,整个系统的瓶颈在于数据库;原因很简单:web应用中的其他因素,如网络带宽、负载均衡节点、应用服务器(包括CPU、内存、硬盘灯、连接数等)、缓存,很容易通过横向扩展(俗称加法机)。对于MySQL,由于数据一致性要求,无法通过增加机器来分散写入数据库的压力;虽然可以通过前置缓存(Redis等)、读写分离、分库分表等方式来降低压力,但是相对于系统其他组件的横向扩展来说,实在是太局限了。数据库基准测试的作用是分析数据库在当前配置(包括硬件配置、操作系统、数据库设置等)下的性能,从而找出MySQL的性能阈值,并根据需要调整配置实际系统要求。基准指标常见的数据库指标包括:TPS/QPS:测量吞吐量。响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等。时间百分比有更大的参考意义,比如前95%的请求的最大响应时间。.并发性:同时处理的查询请求数。基准测试的分类对于MySQL基准测试,有以下两种思路:(1)对整个系统进行基准测试:通过http请求进行测试,例如浏览器、APP或postman等测试工具。该方案的优点是可以更好的针对整个系统,测试结果更加准确;缺点是设计复杂,实施困难。(2)只针对MySQL进行Benchmarking:优缺点与针对整个系统的测试正好相反。对MySQL进行benchmark时,一般会用到专门的工具,比如mysqlslap、sysbench等,其中sysbench比mysqlslap更通用、更强大,更适合Innodb(因为它模拟了Innodb的很多IO特性)。下面介绍使用sysbench进行基准测试的方法。sysbench简介sysbench是一个跨平台的基准测试工具,支持多线程和多数据库;主要包括以下测试:1.CPU性能2.磁盘io性能3.调度器性能4.内存分配和传输速度5.POSIX线程性能6.数据库性能(OLTP基准测试)7.本文主要介绍测试数据库性能。sysbench安装本文使用的环境为CentOS6.5;其他Linux系统的安装方法类似。MySQL版本是5.6。1.下载并解压wgethttps://github.com/akopytov/sysbench/archive/1.0.zip-O"sysbench-1.0.zip"unzipsysbench-1.0.zipcdsysbench-1.02。安装依赖yuminstallautomakelibtool–y3。安装前确保在之前解压的sysbench目录下。./autogen.sh./configureexportLD_LIBRARY_PATH=/usr/local/mysql/include#替换成includemakemakeinstall在本机mysql的路径下执行sysbench–help,可以看到sysbench的详细使用方法。sysbench的基本语法如下:sysbench[options]...[testname][command]下面介绍实际使用中常用的参数和命令。1.commandcommand是sysbench要执行的命令,包括prepare、run和cleanup。顾名思义,prepare是为测试提前准备数据,run是执行正式测试,cleanup是测试完成后清理数据库。2.testnametestname指定要执行的测试。在老版本的sysbench中,可以通过--test参数指定测试脚本;在新版本中,--test参数已被声明为已过时,因此您无需使用--test,而是直接指定脚本。例如下面两种方法效果一样:sysbench--test=./tests/include/oltp_legacy/oltp.luasysbench./tests/include/oltp_legacy/oltp.lua测试用的脚本是lua脚本,可以使用sysbench自带的脚本,也可以自己开发。对于大多数应用程序,使用sysbench附带的脚本就足够了。在不同版本的sysbench中,lua脚本的位置可能不同。您可以使用find命令在sysbench路径中搜索oltp.lua。P.S.:大部分数据业务都是oltp类型的。如果你不知道oltp是什么,那么你的数据服务大概率是oltp类型的。3.optionssysbench的参数很多,比较常用的有: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。在简单模式下,只测试简单的查询;nontrx不仅可以测试查询,还可以插入更新等,但不使用事务;复杂模式下,测试最全面,会测试增删改查,会用到事务。您可以根据自己的需要选择测试模式。2.--oltp-tables-count:测试表的个数,根据实际情况选择3.--oltp-table-size:测试表的大小,根据实际情况选择4.--threads:客户端并发连接数5.--time:测试执行的时间,单位是秒,值不要太短,可以选择1206。--report-interval:生成的时间间隔报告,单位是秒,如10sysbench使用示例在执行sysbench时,需要注意的是:1、尽量不要在运行MySQL服务器的机器上进行测试。一方面可能无法体现网络(即使是局域网)的影响,另一方面sysbench的运行(尤其是并发数设置高时)会影响性能的MySQL服务器。2、可以逐渐增加客户端的并发连接数(--thread参数),观察连接数不同情况下MySQL服务器的性能表现;例如分别设置为10、20、50、100等。3.一般的执行方式可以很复杂。如果需要测试服务器的只读性能或不使用事务时的性能,可以选择简单模式或非trx模式。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准备其中,执行方式复杂,使用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=复杂的--oltp-tables-count=10--oltp-table-size=100000--threads=10--time=120--report-interval=10运行>>/h??ome/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清理测试结果测试完成后检查输出文件如下:其中,对我们比较重要的信息包括:queries:查询总数和qpstransactions:事务总数和tpsLatency-95thpercentile:前95%的最大响应时间的请求,在这个例子中是344毫秒,这个延迟非常大,因为我使用的MySQL服务器的性能很差;这个值在正式环境中是绝对不能接受的。建议以下是使用sysbench的一些建议。1、开始测试前,首先要明确:是用整个系统的benchmark测试,还是MySQL的benchmark测试,还是两者兼而有之。2、如果需要对MySQL进行benchmark测试,还需要明确精度要求:是否需要使用生产环境的真实数据,还是使用工具生成;前者实施起来比较麻烦。如果要使用真实数据,尽量使用所有数据,而不是部分数据。3.基准测试需要多次运行才有意义。4、测试时注意主从同步状态。5.测试必须模拟多线程的情况。单线程的情况不仅不能模拟真正的效率,更不能模拟阻塞甚至死锁的情况。以上就是良序教程网为各位小伙伴分享的MySQL基准测试和sysbench工具。以上就是良序教程网为各位小伙伴们分享的Linux相关知识。
