第章 MySQL基准测试
基准测试(benchmark)是MySQL 新手和专家都需要掌握的一项基本技能简单地说基准测试是针对系统设计的一种压力测试通常的目标是为了掌握系统的行为但也有其他原因如重现某个系统状态或者是做新硬件的可靠性测试本章将讨论MySQL 和基于MySQL 的应用的基准测试的重要性策略和工具我们将特别讨论一下sysbench这是一款非常优秀的MySQL 基准测试工具
为什么需要基准测试
为什么基准测试很重要?因为基准测试是唯一方便有效的可以学习系统在给定的工作负载下会发生什么的方法基准测试可以观察系统在不同压力下的行为评估系统的容量掌握哪些是重要的变化或者观察系统如何处理不同的数据基准测试可以在系统实际负载之外创造一些虚构场景进行测试基准测试可以完成以下工作或者更多
验证基于系统的y一些假设确认这些假设是否符合实际情况
重现系统中的某些异常行为以解决这些异常
测试系统当前的运行情况如果不清楚系统当前的性能就无法确认某些优化的效果如何也可以利用历史的基准测试结果来分析诊断一些无法预测的问题
模拟比当前系统更高的负载以找出系统随着压力增加而可能遇到的扩展性瓶颈
规划未来的业务增长基准测试可以评估在项目未来的负载下需要什么样的硬件需要多大容量的网络以及其他相关资源这有助于降低系统升级和重大变更的风险
测试应用适应可变环境的能力例如通过基准测试可以发现系统在随机的并发峰值下的性能表现或者是不同配置的服务器之间的性能表现基准测试也可以测试系统对不同数据分布的处理能力
测试不同的硬件软件和操作系统配置比如RAID y 还是RAID 更适合当前的系统?如果系统从ATA 硬盘升级到SAN 存储对于随机写性能有什么帮助? Linux 系列的内核会比 系列的可扩展性更好吗?升级MySQL 的版本能改善性能吗?为当前的数据采用不同的存储引擎会有什么效果?所有这类问题都可以通过专门的基准测试来获得答案
证明新采购的设备是否配置正确笔者曾经无数次地通过基准测试来对新系统进行压测发现了很多错误的配置以及硬件组件的失效等问题因此在新系统正式上线到生产环境之前进行基准测试是一个好习惯永远不要相信主机提供商或者硬件供应商的所谓系统已经安装好并且能运行多快的说法如果可能执行实际的基准测试永远是一个好主意
基准测试还可以用于其他目的比如为应用创建单元测试套件但本章我们只关注与性能有关的基准测试
基准测试的一个主要问题在于其不是真实压力的测试基准测试施加给系统的压力相对真实压力来说通常比较简单真实压力是不可预期而且变化多端的有时候情况会过于复杂而难以解释所以使用真实压力测试可能难以从结果中分析出确切的结论
基准测试的压力和真实压力在哪些方面不同?有很多因素会影响基准测试比如数据量数据和查询的分布但最重要的一点还是基准测试通常要求尽可能快地执行完成所以经常给系统造成过大的压力在很多案例中我们都会调整给测试工具的最大压力以在系统可以容忍的压力阈值内尽可能快地执行测试这对于确定系统的最大容量非常有帮助然而大部分压力测试工具不支持对压力进行复杂的控制务必要记住测试工具自身的局限也会影响到结果的有效性
使用基准测试进行容量规划也要掌握技巧不能只根据测试结果做简单的推断例如假设想知道使用新数据库服务器后系统能够支撑多大的业务增长首先对原系统进行基准测试然后对新系统做测试结果发现新系统可以支持原系统 倍的TPS(每秒事务数)这时候就不能简单地推断说新系统一定可以支持 倍的业务增长这是因为在业务增长的同时系统的流量用户数据以及不同数据之间的交互都在增长它们不可能都有 倍的支撑能力尤其是相互之间的关系而且当业务增长到 倍时应用本身的设计也可能已经随之改变可能有更多的新特性会上线其中某些特性可能对数据库造成的压力远大于原有功能而这些压力数据关系和特性的变化都很难模拟所以它们对系统的影响也很难评估
结论就是我们只能进行大概的测试来确定系统大致的余量有多少当然也可以做一些真实压力测试(和基准测试有区别)但在构造数据集和压力的时候要特别小心而且这样就不再是基准测试了基准测试要尽量简单直接结果之间容易相互比较成本低且易于执行尽管有诸多限制基准测试还是非常有用的(只要搞清楚测试的原理并且了解如何分析结果所代表的意义)
返回目录高性能MySQL
编辑推荐
ASP NET开发培训视频教程
数据仓库与数据挖掘培训视频教程
Oracle索引技术