MySQL基准测试(benchmark)
基准测试是唯一方便有效的、可以学习系统在给定的工作负载下会发生什么的方法。基准测试可以观察系统在不同压力下的行为,评估系统的容量,掌握哪些是重要的变化,或者观察系统如何处理不同的数据。
- 验证基于系统的一些假设,确认这些假设是否符合实际情况
- 重现系统中的某些异常行为,以解决这些异常
- 测试系统当前的运行情况。如果不清楚系统的当前性能,就无法确认某些优化的效果如何。也可以利用历史的基准测试结果来分析诊断一些无法预测的问题。
- 模拟比当前系统更高的负载,以找出系统随着压力增加而可能遇到的扩展性瓶颈。
- 规划未来的业务增长。基准测试可以评估在项目未来的负载下,需要什么样的硬件,需要多大容量的网络,以及其他相关资源。这有助于降低系统升级和重大变更的风险。
- 测试应用适应可变环境的能力。
- 测试不同的硬件、软件和操作系统配置
- 证明新采购的设备是否配置正确。
基准测试的一个主要问题在于其不是真实压力测试。基准测试施加给系统的压力相对于真实压力来说,比较简单。
我们只能进行大概的测试,来确定系统大致的余量有多少。基准测试要尽量简单直接,结果之间容易相互比较,成本低切易于执行。
基准测试的策略
- 针对整个系统的整体测试(集成式)
- 单独测试MySQL(单组件式)
针对整个系统做集成式测试,而不是单独测试MySQL的原因如下:
- 测试整个应用系统,包括Web服务器、应用代码、网络和数据库是非常有用的,因为用户关注的并不仅仅是MySQL本身的性能,而是应用整体的性能。
- MySQL并非总是应用的瓶颈,通过整体的测试可以揭示这一点。
- 只有对应用做整体测试,才能发现各个部分之间的缓存带来的影响。
- 整体应用的集成式测试更能揭示应用的真实表现,而单独组件的测试很难做到这一点。
针对于以下情况,可以只测试MySQL:
- 需要比较不同的schema或查询的性能
- 针对应用中某个具体问题的测试
- 为了避免漫长的基准测试,可以通过一个短期的基准测试,做到快速的“周期循环”,来检测出某些调整后的效果。
测试指标
吞吐量 单位时间内的事务处理数。(标准测试TPC-C) 这类基准测试主要针对OLTP的吞吐量,适用于多用户的交互式应用。常用的测试单位是每秒事务数(TPS),有些也采用每分钟事务数(TPM)
响应时间或延迟 用于测试任务所需的整体时间。根据具体应用,测试的时间单位可能是微秒、毫秒或者分钟。根据不同的时间单位可以计算出平均响应时间、最小响应时间、最大响应时间和所占百分比。 使用图表有助于理解测试结果。
并发性 并发性基准测试需要关注的是正在共组哦中的并发操作,或者是同时工作中的线程数或者连接数。当并发性增加时,需要测量吞吐量是否下降,响应时间是否变长。并发性测量完全不同于响应时间的吞吐量。它不像是一个结果,更像是设置基准测试的一种属性。
可扩展性 在系统的业务压力可能发生变化的情况下,测试可扩展性就非常必要了。可扩展性是指给系统增加一倍的工作,在理想情况下就能获得两倍的结果。或者说,给系统增加一倍的资源(比如两倍的CPU数),就可以获得两倍的吞吐量。当然,同时性能也必须在可以接受的范围内。(大多数系统是无法做到如此理想的线性扩展的。随着压力的变化,吞吐量和性能都可能越来越差)。
规划基准测试的第一步是提出问题并明确目标,然后决定是采用标准的基准测试还是设计专用的测试。
如果采用标准的基准测试,应该确认了选择合适的测试方案。设计专用的基准测试是很复杂的,往往需要一个迭代的过程。首先需要获得生产数据的数据集快照,并且该快照很容易还原,以便进行后续的测试。
针对数据运行查询,可以建立一个单元测试集是作为初步的测试,并运行多遍。但是这和真实的数据库环境还是有差别的。更好的办法是选择有个代表性的时间段,记录生产系统上的所有查询。如果时间段选得比较小,则可以选择多个时间段。这样有助于覆盖整个系统的活动状态。
可以在不同级别记录查询,可以记录Web服务器上的HTTP请求,也可以打开MySQL的查询日志。
即使不需要创建专用的基准测试,详细地写下测试规则也是必需的。测试可能要多次反复运行,因此需要精确地重现测试过程。测试规划应该记录测试数据、系统配置的步骤、如何测量和分析结果,以及预热的方案等。
应该建立将参数和结果文档化的规范,每一轮测试都必须进行详细记录。需要记住的是,经常要写一些脚本来分析测试结果,因此能够不用打开电子表格或者文本文件等额外操作,当然是更好的。
基准测试工具
已有的集成式测试工具如下:
- ab 是一个Apache HTTP 服务器基准测试工具,它可以测试HTTP服务器每秒最多可以处理多少请求。如果测试的是Web应用服务,这个结果可以转换成整个应用每秒可以满足多少个请求。
- http_load 概念上与ab相似,但比ab要更加灵活。可以通过一个输入文件提供多个URL,http_load在这些URL中随机选择进行测试。
- JMeter 可以加载其他应用并测试其性能。它虽然是设计用来测试Web应用的,但可以用于测试FTP服务器,或者通过JDBC进行数据库查询测试。
已有的单组件测试工具如下:
- mysqlslap 可以模拟服务器的负载,并输出计时信息。如果没有指定SQL语句,mysqlslap会自动生成查询schema的select语句。
- MYSQL Benchmark Suyite 可以用于在不同数据库服务器上进行比较测试。它是单线程的,主要用于测试服务器执行查询的速度。结果会显示哪种类型的操作在服务器上执行得更快。
- Super Smack 一款用于MySQL和PostgreSQL的基准测试工具,可以提供压力测试和负载生成。可以模拟多用户访问,可以加载测试数据到数据库,并支持使用随机数据填充测试表。
- Database Test Suite 一款类似某些工业标准测试的测试工具集。
- Percona's TPCC-MySQL Tool 类似于TPC-C的基准测试工具集,其中有部分是专门为MySQL测试开发的。
- sysbench 一款多线程系统压测工具。它可以根据影响数据库服务器性能的各种因素来评估系统的性能。
MySQL基准测试(benchmark)的更多相关文章
- Mysql基准测试详细解说(根据慕课网:《打造扛得住Mysql数据库架构》视频课程实时笔录)
什么是基准测试 基准测试是一种测量和评估软件性能指标的活动用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新进行基准测试以及评估变化对性能的影响. 我们可以这样认为:基准测试是针对系统设置的一 ...
- MySQL基准测试(三)--开源工具与实例演示
MySQL基准测试(三)--开源工具与实例演示 针对web应用 ab ab是一个Apache HTTP服务的基准测试工具. http_load http_load是一个针对Web服务器测试工具. JM ...
- MySQL基准测试(一)--原因,策略,思路
MySQL基准测试(一)--原因,策略,思路 运用benchmark的原因 验证一些你认为的问题,通过基准测试和模拟数据来验证. 解决生产系统的一些异常 测试系统的当前的运行情况,通过历史的基准测试结 ...
- MySQL 基准测试
这是<高性能 MySQL(第三版)>第二章的读书笔记. 基准测试(benchmark)是针对系统的压力测试,用于掌握系统行为或重新系统的某个状态.sysbench 是常用的 MySQL 基 ...
- MySQL基准测试工具
一.基准测试 基准测试(benchmark)是针对系统设计的一种压力测试. 基准测试是简化了的压力测试. 1.1 常见指标 TPS QPS 响应时间 并发量 1.2 收集与分析数据脚本 收集数据的sh ...
- 详解MySQL基准测试和sysbench工具
前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处, ...
- 【mysql】mysql基准测试
基准测试定义 基准测试其实是一种测量和评估软件性能指标的方法,用于建立某个时间点的性能基准,以便当系统的软硬件发生变化的时候重新进行基准测试以评估变化对性能的影响.所以对系统性能的测量,才能知道我们的 ...
- 详解MySQL基准测试和sysbench工具(转)
前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处, ...
- MySQL基准测试(二)--方法
MySQL基准测试(二)--方法 目的: 方法不是越高级越好.而应该善于做减法.至简是一种智慧,首先要做的是收集MySQL的各状态数据.收集到了,不管各个时间段出现的问题,至少你手上有第一时间的状态数 ...
- mysql基准测试工具tpcc-mysql安装、使用、结果解读
TPCC是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统,tpcc-mysql是percona基于TPC-C(下面简写成TPCC)衍生出来的产品,专用于My ...
随机推荐
- 初识SuperSocket
有一些企业由于以前使用的操作系统是被淘汰的操作系统,例如OpenVMS.现需要将针对openvms开发的通讯程序进行移植到现在的windows操作系统上,通过一段时间的了解,现在需要花时间去找商业性的 ...
- Oracle RAC学习笔记01-集群理论
Oracle RAC学习笔记01-集群理论 1.集群相关理论概述 2.Oracle Clusterware 3.Oracle RAC 原理 写在前面: 最近一直在看张晓明的大话Oracle RAC,真 ...
- java系列笔记---正则表达式(1)常用符号
正则表达式---常用符号 首先声明,我这里列表的是经常使用的一些符号,如果你想得到全部,那建议你通过API中,搜索Pattern类,会得到所有符号. 字符类 [abc] a.b 或 c(简单类) [^ ...
- TimSort in Java 8
在项目中使用了Collections.sort(list, comparator)对集合进行了排序,偶然间遇到异常IllegalArgumentException: "Comparison ...
- 关于j2ee工程发布到was上后,部分更新,例修改web.xml配置文件不起作用的原因解析【转】
在WAS中,应用的配置是从config/cells....目录下读取:而资源从/installedApps目录下读取 故当配置文件(例web.xml)发生改变时,只更新应用程序资源文件/install ...
- uml视频系列(二)——uml的概述
在与uml进行了第一次的接触后,就被uml的博学多才给迷住了,uml居然可以做这么多的东西.才思敏捷的uml是设计软件的好帮手. 你还在为自己的类图不会设计而感到无助吗?你还在为你的对象不好确定而感到 ...
- JavaScript 中的 this 问题总结 !
2016-12-28 vvv阿城 JavaScript 转自 https://qiutc.me/post/this-this-this-in-javascript.html#call,_apply, ...
- iOS开发之App主题切换完整解决方案(Swift版)
本篇博客就来介绍一下iOS App中主题切换的常规做法,当然本篇博客中只是提到了一种主题切换的方法,当然还有其他方法,在此就不做过多赘述了.本篇博客中所涉及的Demo完全使用Swift3.0编写完成, ...
- Padding Borders Outlines Margins
简介: 在20世纪90年代,许多网页布局是使用table,使用table最主要的原因是因为可以放text到一个盒子里,但是这是一个比较复杂的过程,现在可以使用比较简单的方法,那就是css. 元素盒子: ...
- 浅谈Java单例模式
关于基本的懒汉式,饿汉式等写法网上介绍多如牛毛,这里不再赘述,直接讨论加了volatile关键字的双重锁(Double check),静态内部类以及枚举等写法,如有不对,恳请读者指出,欢迎讨论. 1. ...