2020 年 6 月 17 日 MySQL 基准测试

发布于: 2020 年 06 月 17 日

基准测试是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、顺序写,测试顺序写的性能

发布于: 2020 年 06 月 17 日 阅读数: 15
用户头像

瑞克与莫迪

关注

还未添加个人签名 2020.05.18 加入

还未添加个人简介

评论

发布
暂无评论
2020年6月17日     MySQL基准测试