这是《高性能 MySQL(第三版)》第二章的读书笔记。

基准测试(benchmark)是针对系统的压力测试,用于掌握系统行为或重新系统的某个状态。sysbench 是常用的 MySQL 基准测试工具。

1. 为何需要基准测试

通过基准测试,可以方便有效的学习到系统在给定的工作负载下会发生什么。

  • 重现并解决异常
  • 验证假设
  • 测试系统当前运行情况,以确认优化的效果
  • 模拟更高的负载,以找出系统可能的扩展瓶颈
  • 测试应用适应可变环境的能力。如系统在随机的并发峰值下的表现
  • 测试不同硬件、软件和操作系统

2. 基准测试的策略

两个策略:

  • 针对整个系统的整体测试(集成式 full-stack)
  • 单独测试 MySQL(单组件式 single-component)。

2.1 基准测试的指标

指标决定了测试工具和技术。

吞吐量

吞吐量指的是单位时间内的事务处理数。主要测试在线事务(OLTP)的吞吐量。测试单位是每秒事务数或每分钟事务数。

响应时间或延迟

测试任务所需的整体时间。测试的时间单位可以是微秒、毫秒、秒、分钟。可以求出平均响应时间、最大响应时间、最小响应时间及各自的比例。

并发性

并发性测试通常是测试应用在不同并发下的性能。可以通过 sysbench 指定 32、64、128 个线程的测试,然后在测试期间记录 MySQL 数据库的 Threads_running 状态值。

Web 服务器的高并发一般也会导致数据库的高并发。一个设计良好的应用,可以同时打开成百上千个 MySQL 数据库服务器连接,但任一时刻都只有少数连接在执行查询。

并发性测试基准关注的是正在工作中的并发操作,或同时工作的线程数或连接数。并发增大时,需要测试吞吐量是否下降,响应时间是否变长。

可扩展性

系统资源翻倍(CPU、内存等)时,数据库吞吐量翻倍,且性能仍可接受。大多数系统无法线性扩展。

3 基准测试方法

设计和执行基准测试时的常见错误:

  • 使用真实数据的子集而不是全集
  • 使用错误的数据分布
  • 在多用户场景中只做单用户测试
  • 在单服务器上测试分布式应用
  • 与真实用户行为不匹配
  • 反复执行同一个查询。这会跟真实情况下缓存命中率有较大差异。
  • 没有检查错误。MySQL 检测到语法错误后会停止查询,需要定期查看错误日志。
  • 忽略了系统预热。重启后缓存为空,查询较慢。
  • 使用了默认的服务器配置
  • 测试时间太短

3.1 设计和规划测试基准

第一步,提出问题并明确目标。再决定采用标准的基准测试还是设计专用测试。

然后,针对数据运行查询。可以建立单元测试集,但最好在一个典型时间段内(一整天或高峰时的一小时)记录生产系统上的所有查询。

可以在不同级别记录查询。对于集成式(full-stack)基准测试,可以记录 Web 服务器上的 HTTP 请求,也可以打开 MySQL 的查询日志。

写详细的测试规划。测试规划应该记录测试数据、系统配置的步骤、如何测量和分析结果、预热方案等。

建立将参数和结果文档化的规范。每一轮测试都详细记录。

3.2 获取系统性能和状态

执行基准测试时,需要尽可能的收集被测系统的信息,包括系统状态和性能指标,例如 CPU 使用率、磁盘 I/O、网络流量统计、SHOW GLOBAL STATUS 计数器等。可以使用 shell 脚本收集这些数据。

3.3 运行基准测试并收集结果

自动化测试可以获得更精确的结果,避免测试人员误操作或出现失误。可以用 shell、PHP 等脚本语言实现自动化测试的所有过程,包括装载数据、系统预热、执行测试、记录结果等。

4 基准测试工具

4.1 集成式测试工具

要获得整个应用的概况,就用集成式测试。

ab

ab 是一个 Apache HTTP 服务器基准测试工具。可以测试 HTTP 服务器每秒最多处理多少请求。简单易用,但是只能针对单个 URL 进行压力测试。

http_load

类似 ab,也是对 Web 服务器进行测试。可以通过一个文件提供多个 URL 随机测试。也可以定制 http_load 使其按照时间比例测试。

JMeter

可以通过控制预热时间等参数,灵活模拟用户的访问。

4.2 单组件式测试工具

mysqlslap

MySQL 发行包中集成,可以模拟服务器的负载,并输出计时信息。

MySQL Benchmark Suite(sql-bench)

也是在 MySQL 发行包中集成了。可以在不同数据库服务器上进行比较测试。测试套件包含了大量预定义的测试,易用。缺点是:单用户模式,测试数据集小且用户无法指定自己的数据集。单线程运行,无法测试多 CPU 的服务器。

Super Smark

可以提供压力测试和负载生成。复杂而强大,可以模拟多用户访问,可以加载测试数据到数据库,支持使用随机数据填充测试表。

Database Test Suite

是类似工业标准测试的测试工具集,例如事务处理性能委员会(TPC,Transaction Processing Performance Council)制定的各种标准。

sysbench

sysbench(https://launchpad.net/sysbench )是多线程系统压测工具。可以根据影响数据库服务器性能的各种因素来评估系统的性能。可以测试文件 I/O、操作系统调度器、内存分配和传输速度、POSIX 线程及数据库服务器。支持 Lua 脚本,支持对数据库、操作系统、硬件的测试。

5. 基准测试案例

5.1 sysbench

参考这里

MySQL 基准测试的更多相关文章

  1. 详解MySQL基准测试和sysbench工具

    前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处, ...

  2. Mysql基准测试详细解说(根据慕课网:《打造扛得住Mysql数据库架构》视频课程实时笔录)

    什么是基准测试 基准测试是一种测量和评估软件性能指标的活动用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新进行基准测试以及评估变化对性能的影响. 我们可以这样认为:基准测试是针对系统设置的一 ...

  3. 【mysql】mysql基准测试

    基准测试定义 基准测试其实是一种测量和评估软件性能指标的方法,用于建立某个时间点的性能基准,以便当系统的软硬件发生变化的时候重新进行基准测试以评估变化对性能的影响.所以对系统性能的测量,才能知道我们的 ...

  4. 详解MySQL基准测试和sysbench工具(转)

    前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处, ...

  5. MySQL基准测试(三)--开源工具与实例演示

    MySQL基准测试(三)--开源工具与实例演示 针对web应用 ab ab是一个Apache HTTP服务的基准测试工具. http_load http_load是一个针对Web服务器测试工具. JM ...

  6. MySQL基准测试(二)--方法

    MySQL基准测试(二)--方法 目的: 方法不是越高级越好.而应该善于做减法.至简是一种智慧,首先要做的是收集MySQL的各状态数据.收集到了,不管各个时间段出现的问题,至少你手上有第一时间的状态数 ...

  7. MySQL基准测试(一)--原因,策略,思路

    MySQL基准测试(一)--原因,策略,思路 运用benchmark的原因 验证一些你认为的问题,通过基准测试和模拟数据来验证. 解决生产系统的一些异常 测试系统的当前的运行情况,通过历史的基准测试结 ...

  8. mysql基准测试工具tpcc-mysql安装、使用、结果解读

    TPCC是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统,tpcc-mysql是percona基于TPC-C(下面简写成TPCC)衍生出来的产品,专用于My ...

  9. 解MySQL基准测试和sysbench工具

    前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处, ...

随机推荐

  1. 在学习linux磁盘管理期间学习的逻辑卷管理笔记

    LVM(逻辑分区)的创建顺序:物理分区-物理卷-卷组-逻辑卷-挂载. 物理卷(Physical Volume,PV):就是指硬盘分区,也可以是整个硬盘或已创建的软RAID,是LVM的基本存储设备. 卷 ...

  2. 如何在CentOS 7上安装newman

    前提:先安装nodejs,详见:如何在CentOS 7上安装Node.js和npm #sudo npm install -g newman 结果: /usr/local/bin/newman -> ...

  3. 帝国CMS 调用专题[eshowzt]标签改为灵动标签[e:loop]的方法

    1.eshowzt说明及示例 [eshowzt]标签模板ID,专题类别ID,显示专题数[/eshowzt] 示例需求:将推荐专题后,显示9个指定专题 原来写法: <span>[eshowz ...

  4. 行人重识别(ReID) ——数据集描述 Market-1501

    数据集简介 Market-1501 数据集在清华大学校园中采集,夏天拍摄,在 2015 年构建并公开.它包括由6个摄像头(其中5个高清摄像头和1个低清摄像头)拍摄到的 1501 个行人.32668 个 ...

  5. linux测试 Sersync 是否正常

    [root@SERSYNC web]# for i in {1..10000};do echo 123456 > /data/web/$i &>/dev/null;do ne [r ...

  6. python面向对象--类和实例的认识

    '''1.数据属性 2.函数属性''' #创建一个类class Chinese: "这是一个中国人的类" #类属性 money=4000 #注意类和对象均用点来访问自己的属性 de ...

  7. Spring Cloud Stream监听已存在的Queues/Exchanges

    环境准备 rabbitmq已运行,端口5672,控制台web端口15672,用户名密码guest/guest 引入spring cloud stream依赖 compile('org.springfr ...

  8. css 伪类选择器:checked实例讲解

    css :checked伪类选择器介绍 css :checked伪类选择器用于选择匹配所有被选中的单选按钮(radio)或复选框(checkbox),你可以结合:checked伪类选择器和:not选择 ...

  9. 爬虫技术:从sougou网站访问微信公众号的过程

    一:分析过程:fidder + chrome开发者工具 1:输入nba跳转的页面,每页显示10条相关公众号的信息 2:分析网站得到每条标题的详情页链接地址在: 3,请求上图中的url,会返回一段js代 ...

  10. [BZOJ] 书堆

    问题描述 蚂蚁是勤劳的动物,他们喜欢挑战极限?现在他们迎来了一个难题!蚂蚁居住在图书馆里,图书馆里有大量的书籍.书是形状大小质量都一样的矩形.蚂蚁要把这些书摆在水平桌子的边緣.蚂蚁喜欢整洁的布置,所以 ...