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 ...
随机推荐
- Swift3.0服务端开发(五) 记事本的开发(iOS端+服务端)
前边以及陆陆续续的介绍了使用Swift3.0开发的服务端应用程序的Perfect框架.本篇博客就做一个阶段性的总结,做一个完整的实例,其实这个实例在<Swift3.0服务端开发(一)>这篇 ...
- 你真的了解如何将 Nginx 配置为Web服务器吗
阅读之前,建议先阅读初识 Nginx. 之后,我们来了解一下 Nginx 配置. 抽象来说,将 Nginx 配置为 Web 服务器就是定义处理哪些 URLS 和如何处理这些URLS 对应的请求.具体来 ...
- MyEclipse-Initializing Java Tooling问题
问题描述: 今天早上打开Eclipse,打开Package Explorer 中项目时,总出现卡死现象. MyEclipse状态栏显示两个任务,(1) Checking for Updates (2) ...
- javascript 终止函数执行操作
1.如果终止一个函数的用return即可,实例如下:function testA(){ alert('a'); alert('b'); alert('c');}testA(); 程序 ...
- 微信jsSDK公众号开发时网页提示 invalid signature错误的解决方法
微信公众号开发jsSDK,链接地址不能加?参数,可以通过#传递参数. 不然.页面wx.ready()时就会报错,用 wx.error(function (res) { alert("接口验证 ...
- cordova StatusBar插件的使用(设置手机状态栏颜色和页面头部颜色一致),做出和原生一样的页面效果体验
cordova StatusBar插件的使用(设置手机状态栏颜色和页面头部颜色一致),做出和原生一样的页面效果体验设置设备状态栏背景颜色StatusBar.backgroundColorByHexSt ...
- 前端基本知识(一):W3C标准&&冒泡事件,捕获事件,W3C DOM对象模型,对比分析
W3C标准是万维网联盟, 其他的可以参考万维网版本的更新内容 一.W3C标准 二.W3C DOM事件 三.冒泡事件 四.捕获事件 一.W3C标准 其实网页是由三分部组成:1.结构(structure) ...
- OSS项目进度(2.19)
前两周先后完成了OSS.Common ,OSS.Http ,OSS.Social 项目的.net standard支持,再次开始进入框架本身的开发,今天进度情况: 一.OSS.Social 完成摇一摇 ...
- js DOM操作---登录例子总结
简单的总结下用 javascript DOM 实现简易登录框例子,下面是简单的模拟登录,没有具体的登录样子,但只是模拟,整理下思路. 页面简单布局,我这个确实太简单了,看代码: <body> ...
- JavaScript中的this关键字的用法和注意点
JavaScript中的this关键字的用法和注意点 一.this关键字的用法 this一般用于指向对象(绑定对象); 01.在普通函数调用中,其内部的this指向全局对象(window); func ...