高性能MySQL第二章

高性能MySQL笔记第二章

为什么需要基准测试?因为基准测试是唯一方便有效的、可以学习系统再给定的工作负载下会发生什么的方法。

  • 验证基于系统的一些假设,是否复合实际情况
  • 重新系统中的某些异常
  • 测试当前系统的运行情况
  • 模拟比当前系统更高的负载
  • 规划业务增长,可以评估项目在未来的负载下,需要什么样的环境条件
  • 测试应用适应可变环境的能力
  • 测试不同硬件、软件组合时的表现
  • 验证新采购设备是否配置正确

基准测试的策略

主要有两种主要的策略:

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

应用的整体基准测试很难建立,甚至很难正确设置。如果测试的设计有问题,那么结果就无法反映真实的情况。不过有时候不需要了解全部情况。至少在项目初期,假如只需要比较不同结构查询的性能,或者是针对应用某个具体问题的测试。

不过如果有条件,依然需要做整个系统的基准测试,因为有时候瓶颈并不一定在数据库上,而且对应用做整体测试,才能发现各部分之间的缓存带来的影响。而且集成式测试更能揭示应用的真实表现。

测试何种指标

有时候需要用不同的方法测试不同的指标。

  • 吞吐量:单位时间内的事务处理数。常用的测试单位是每秒事务数(TPS),有时也采用每分钟事务数(TPM)
  • 响应时间或者延迟:用于测试任务所需的整体时间。通常可以使用百分比响应时间来替代最大响应时间。
  • 并发性:系统的高并发和数据库的高并发并不是一种东西,一个设计良好的web站点同时有很多请求,却可能只有10-15个请求到数据库。这里需要关注的是正在工作中的并发操作,或是同时工作中的线程数,连接数。
  • 可扩展性:给系统增加一倍的工作,会造成多大的影响。或者是给系统增加一倍的资源,能获得的收益。例如吞吐量能否增加一倍,增加一倍的CPU数量。

基准测试方法

有一些常见的错误可能导致测试结果无用或者不精确:

  • 使用真实数据的子集而不是全集,比如应用需要处理几百G的数据,但测试只有1GB
  • 使用错误的数据分布,使用均匀分布的数据测试
  • 使用不真实的分布参数,例如假定所有用户的个人信息都会平均地读取
  • 多用户场景中只做单用户的测试
  • 在单服务器上测试分布式应用
  • 与真实用户行为不匹配
  • 反复执行同一个查询
  • 没有检查错误。如果测试的结果无法得到合理的解释。比如一个慢查询突然变快了。
  • 忽略了系统预热的过程。系统重启后马上进行测试。有时候系统重启后需要一段时间才能达到正常性能
  • 使用默认的服务器配置
  • 测试时间太短

设计和规划基准测试

对应的应用使用对应的测试方案,针对数据运行查询,可以建立单元测试集作为初步的测试,并运行多遍。最好是选择一个有代表性的时间段,这样有助于覆盖整个系统的活动状态。可以在不同级别记录查询,倘若要重演这些查询,就要确保多线程来并发执行,而不是单线程。

每次创建的基准测试,需要详细地写下测试规划,因为测试可能多次反复运行。测试规划应该记录测试数据、系统配置的步骤、如何测量和分析结果,以及预热的方案等。

基准测试应该运行多长时间

基准测试应该运行足够长的时间,如果无法确认测试需要运行多长时间,可以让测试一直运行,持续观察直到系统已经稳定。一个场景的错误的测试方法是,只执行一系列短期的测试,比如每次60秒,并在此测试的基础上去总结系统的性能。

获取系统性能和状态

执行基准测试时,需要尽可能多地收集被测试系统地信息。最好为基准测试建立一个目录,并且每执行一轮测试都创建单独的子目录,将测试结果、配置文件、测试指标、脚本和其他相关说明都保存在其中。

需要记录的数据包括系统状态和性能指标,诸如CPU使用率,磁盘IO网络流量统计、SHOW GLOBAL STATUS计数器等。

获得准确的测试结果

最好的办法是回答一些关于基准测试的基本问题:

  • 是否选择了正确的基准测试?
  • 是否为问题收集了数据?
  • 是否采用了错误的测试标准
  • 确认测试结果是否可重复
  • 外部的压力、性能分析、监控系统、详细的日志记录、周期性作业

很多时候,测试都是通过迭代逐步修改基准测试的参数,而不是每次运行时都做大量的修改。

运行基准测试并分析结果

通常来说,自动化基准测试时好主意,这样可以获得更精确的测试结果。要尽可能地使所有测试过程都自动化,包括装载数据、系统预热、执行测试、记录结果等。

绘图的重要性

单纯看数据不一定能看出啥情况,当出现在图表上的时候可能才会发现数据的连续性或者在某方面有异常情况。

基准测试工具

没有不要开发自己的基准测试系统,除非现有的工具确实无法满足需求。文中介绍了多种工具,但是嘛,书比较老,工具的话还是不要参考书上的了。我重新找了篇博客进行测试。
该博客已经讲得很清楚了就不再赘述了sysbench - 数据库功能及性能测试工具


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!