基准测试定义
基准测试其实是一种测量和评估软件性能指标的方法,用于建立某个时间点的性能基准,以便当系统的软硬件发生变化的时候重新进行基准测试以评估变化对性能的影响。所以对系统性能的测量,才能知道我们的优化是否达到了预期的效果,这样对系统的性能测试叫做基准测试,也是针对系统设置的一种压力测试,观察系统在不同压力下的表现,评估系统的容量。不过基准测试和压力测试还是有点区别的。
基准测试要尽量的直接,简单,各个测试后结果要容易比较,基准测试所用的数据的都是测试工具所生成的,只能用于评估服务器的处理能力。而压力测试通常是针对真实的业务数据进行测试,获得系统真实所能承受的压力。所用基准测试是一种简化的压力测试,并且基准测试不关心具体的业务逻辑,所进行的测试是和真实的业务并没有关系。
基准测试的目的
1.建立mysql服务器的性能基准线,确定当前mysql服务器运行情况。可以从历史记录去比较来诊断应用中出现的问题。
2.模拟比当前系统更高的负载,以找出系统扩展的瓶颈。通过增加数据库的并发,来观察QPS,TPS的变化,确定并发量和性能之间的最优关系。
3.可以测试不同的硬件(比如ssd固态硬盘和传统机械硬盘中随机写性能哪个更快),软件(升级mysql版本是否能改善mysql的性能,以及不同的存储引擎的性能),操作系统(linux不同文件系统,磁盘分区对数据库是否有影响)的配置。
4.验证新的硬件设备上线前是否配置正确达到预期的结果,同时了解新设备的性能基准线。
如何基准测试
1.对整个系统进行测试。
优点:能够测试整个系统的性能,包括web服务器,缓存,程序,mysql数据库等。能反映出系统中各个接口之间的性能问题。
缺点:测试设计复杂,花费的时间较长。
2. 单独对组件的测试,比如mysql。只更新了mysql硬件,或者更新了mysql的索引,所以这时候仅需要对mysql测试就行。
优点:测试简单,所耗费时间比较短。可以针对某个具体问题去测试。
缺点:无法全面了解真个系统的性能基准线。
mysql基准测试的常见指标
1.单位时间内所执行完的事务数(TPS)。
2.单位时间内所处理完的查询数(QPS)。注意是已经处理完的。
TPS和QPS用于衡量数据库的吞吐量。
3.响应时间,衡量一个测试任务完成的整体花费的时间。可以分为平均响应时间,最小响应时间,最大响应时间,个时间所占的百分比。
4.并发量。同时处理的查询请求的数量,(注意:并发量不等于连接数),是正在工作中的并发操作数或同时工作的线程或进程的数量。
mysql基准测试工具mysqlslap,sysbench
常见的基准测试工具有Mysqlslap,Sysbench,Jmeter。
Mysqlslap是一个MySQL官方提供的压力测试工具,是自带的。可以通过模拟多个并发客户端访问MySQL来执行压力测试。但是如果测试硬件,比如CPU,线程,磁盘,以及内存的性能,这些Mysqlslap都测试不了。
下面可以使用mysqlslap --help来显示提供的使用方法:
[root@localhost ~]# mysqlslap --help
mysqlslap Ver 1.0 Distrib 8.0.-dmr, for Linux (x86_64)
Copyright (c) , , Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Run a query multiple times against the server. Usage: mysqlslap [OPTIONS] Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
The following groups are read: mysqlslap client
The following options may be given as the first argument:
--print-defaults Print the program argument list and exit.
--no-defaults Don't read default options from any option file,
except for login file.
--defaults-file=# Only read default options from the given file #.
--defaults-extra-file=# Read this file after the global files are read.
--defaults-group-suffix=#
Also read groups with concat(group, suffix)
--login-path=# Read this path from the login file.
-?, --help Display this help and exit.
-a, --auto-generate-sql
Generate SQL where not supplied by file or command line.
--auto-generate-sql-add-autoincrement