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 ...
随机推荐
- loadrunner controller:实时查看VUser的运行情况
1) 如下图,在Run标签页,点击"Vusers..."打开Vuser窗口: 2) 如下图选中一个Vuser点击按钮可以打开Run-Time Vie ...
- 分享一个基于thrift的java-rpc框架
简单介绍 这是一个简单小巧的Java RPC框架,适用于Java平台内.为系统之间的交互提供了.高性能.低延迟的方案.适合在集群数量偏少的情况下使用(50台以下集群环境).当然.它也可以在大型集群环境 ...
- 《微信小程序七日谈》- 第六天:小程序devtool隐藏的秘密
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩: 第五 ...
- 安装Ubuntu时的硬盘分区
根目录 大小:60G~100G(用来安装程序) 新分区的类型:主分区 新分区的位置:空间起始位置 用于:EXT4日志文件系统 挂载点:"/" 大小:4G 新分区的类型:逻辑分区 新 ...
- Spark:一个独立应用
[TOC] Spark:一个独立应用 关于构建 Java和Scala 在Java和Scala中,只需要给你的应用添加一个对于spark-core的Maven依赖. Python 在Python中,可以 ...
- 在C语言中以编程的方式获取函数名
仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及代码分析器,经常会需要在运行时访问 ...
- JAVA中的小数
JAVA中的小数称为浮点数 1.有两种类型: float:单精度浮点数.4个字节. double:双精度浮点数.8个字节. 2.类型转换 容量小 -------------------------- ...
- react native 添加第三方插件react-native-orientation(横竖屏设置功能 android)
Installation 1.install rnpm Run npm install -g rnpm 2.via rnpm Run rnpm install react-native-orien ...
- Bootstrap框架的要点--栅格系统
不同的公司要求使用框架有所不同,而Bootstrap框架在工作中使用频次较高,其中栅格系统在这一框架中的地位不容小觑,下面我们开始聊聊它吧. 简单介绍: Bootstrap提供了一套响应式.移动设备优 ...
- ubuntu ssh-keygen Permission denied
ubuntu下生成github上的ssh keys,执行: ssh-keygen 直接执行: sudo chown user1:user1 /home/user1/.ssh -R 成功生成.