2020 年 6 月 17 日 MySQL 基准测试
基准测试是MySQL新手和老手都需要掌握的一个技能,基准测试是针对系统设计的一种压力测试,sysbench是一款非常优秀的MySQL基准测试工具。
1、为什么需要基准测试
因为基准测试是唯一方便有效的、可以学习系统在给定的工作负载下会发生什么的方法。
基准测试可以观察系统在不同压力下的行为。
基准测试可以在系统实际负载之外构造一些虚拟场景进行测试。
2、基准测试策略
推荐测试有两种主要的策略:一是针对整个系统的整体测试,另外是单独测试MySQL。这两种策略也被称为集成式以及单组件式基准测试。
针对系统的
1、测试何种指标
吞吐量:吞吐量是指单位时间内的事务处理数
响应时间或者延迟:这个指标用于测试任务所需的整体时间
并发性:在任意时间有多少同时发生的并发请求,并发性基准测试需要关注的是正在工作中的并发操作,或者是同时工作中的线程数或者连接数。
可扩展性:是指给系统增加一倍的工作,在理想的情况下就能获得两倍的效果
3、基准测试的方法
常见的基准测试误区:1、使用真实数据的子集而不是全集。2、使用错误的数据分布。3、使用不真实的分布参数。4、在多用户场景下只做单用户测试。5、在单服务器上测试分布式应用。6、与用户真实行为不匹配。7、测试时间太短
1、设计和规划基准测试
规划基准测试的第一步是提出问题并明确目标,然后决定是采用标准的基准测试,还是设计专用的测试。
2、基准测试应该运行多长时间
基准测试应该运行足够长时间,有时候无法确认测试需要运行多长时间才足够。如果是这样,可以让测试一直运行,持续观察直到确认系统已经稳定。
3、获取系统性能和状态
在执行基准测试时,需要尽可能多地收集被测试系统信息。最好为基准测试建立一个目录,并且每执行一轮测试都创建单独的子目录,将测试结果、配置文件、测试指标、脚本和其他相关说明都保存在其中。
4、基准测试的工具
1、集成式测试工具
ab是一个Apache HTTP 服务器基准测试工具。它可以测试Http服务器每秒最多可以处理多少请求
JMeter是一个Java应用程序,可以加载其他引用并测试其性能。
2、单组件式测试工具
mysqlslap:可以模拟服务器的负载,并输出计时信息。测试时可以执行并发连接数,并指定SQL语句。如果没有指定SQL语句,mysqlslap会自动生成查询schema的SELECT语句。
MySQL Benchmark Suite(sql-bench):可以用于在不同数据库服务器上进行比较测试。它是单线程的,主要用于测试服务器执行查询的速度。
sysbench:是一款多线程系统压测工具。它可以根据影响数据库服务器性能的各种因素来评估系统性能。可以用来测试文件I/O,操作系统调度器、内存分配和传输速度以及数据库服务器等。
5、基准测试案例
1、sysbench可以执行多种类型的基准测试,它不仅设计用来测试数据库性能,也可以测试运行数据库的服务器的性能。
sysbench是在MySQL用户的工具包中是最有用的工具之一。
以下是使用sysbench的常用基准测试:
sysbench的CPU基准测试:
下面将比较两台不同的GUN/Linux服务器上的测试结果
1)查看CPU的配置:$ cat /proc/cpuinfo
在这台机器上运行如下测试:
sysbench --test=cpu --cpu-max-prime=20000 run
测试的结果展示了计算出素数的时间。
sysbench的文件I/O基准测试:
1)文件I/O基准测试可以测试系统在不同I/O负载下的性能。
测试的第一步是准备阶段,生成测试用到的数据文件,生成的数据文件至少要比内存大。注意:如果文件的数据能完全放入内存中,则操作系统缓存大部分数据,导致测试结果无法体现I/O密集型工作负载。
首先,通过如下命令创建一个数据集:
$ sysbench --test=fileio --file-total-size=150G prepare
然后针对不同的I/O类型选择不同的测试选项:
seqwr 顺序写入 seqrewr 顺序重写 seqrd 顺序读取
$ sysbench --test=fileio -file-total-size=150G --file-test-mode=rndrw
--init-rng=on --max-time=300 --max-request=0 run
最后测试完成后,清除第一步生成的文件:
$ sysbench --test=fileio --file-total-size=150G clenup
sysbench的OLTP基准测试:
OLTP基准测试模拟了一个简单的事务处理系统的工作负载。
首先准备一张超过百万行记录的表,第一步是生成这张表:
$ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test
--mysql-user=root prepare
生成测试数据只需要上面的简单命令即可。
接下来运行测试,这个例子采用了8个并发线程,只读模式,测试时长60秒:
$ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --max-time=60 --oltp-read-only=on --max-request=0 --num-threads=8 run
主要关注的是:
1、总的事务数——transactions
2、每秒事务数
3、时间统计信息
4、线程公平性统计信息,用于模拟负载的公平性。
sysbench的其他特性:
1、内存:测试内存的连续读写性
2、线程:测试线程调度器的性能
3、互斥锁:测试互斥锁的性能,方式是模拟所有线程在同一时刻并发运行,并都短暂请求互斥锁
4、顺序写,测试顺序写的性能
版权声明: 本文为 InfoQ 作者【瑞克与莫迪】的原创文章。
原文链接:【http://xie.infoq.cn/article/cbe63c61cbf4a0149aeeaf695】。文章转载请联系作者。
评论