SQL优化【绩效衡量】

image.png

8.13.1测量表达式和函数的速度
8.13.2使用您自己的基准
8.13.3使用performance_schema测量绩效
要衡量绩效,请考虑以下因素:

无论您是在安静系统上测量单个操作的速度,还是在一段时间内如何操作一组操作( “ 工作负载 ”)。通过简单的测试,您通常可以测试更改一个方面(配置设置,表上的索引集,查询中的SQL子句)如何影响性能。基准测试通常是长时间运行和精心设计的性能测试,其结果可能决定硬件和存储配置等高级选择,或者升级到新MySQL版本的时间。

对于基准测试,有时您必须模拟繁重的数据库工作负载才能获得准确的图像。

表现可能会因许多不同的因素而有所不同,因为几个百分点的差异可能不是决定性的胜利。在不同的环境中进行测试时,结果可能会发生相反的变化。

某些MySQL功能根据工作负载提供帮助或无法帮助提高性能。为了完整性,请始终在打开和关闭这些功能的情况下测试性能。尝试与每个工作负载的两个最重要的功能是 MySQL查询缓存,以及 适应性的散列索引的InnoDB表。

本节从单个开发人员可以执行的简单和直接测量技术发展到需要额外专业知识来执行和解释结果的更复杂测量技术。

{———-}

8.13.1测量表达式和函数的速度
要测量特定MySQL表达式或函数的速度,请BENCHMARK()使用mysql客户端程序调用该函数。它的语法是 。返回值始终为零,但mysql 打印一行显示语句执行的时间。例如: BENCHMARK(loop_count,expression)

MySQL的> SELECT BENCHMARK(1000000,1+1);

  • ———————— +
    | 基准(1000000,1 + 1)|
  • ———————— +
    | 0 |
  • ———————— +
    1排(0.32秒)
    该结果在Pentium II 400MHz系统上获得。它表明MySQL可以在0.32秒内在该系统上执行1,000,000个简单的加法表达式。

内置的MySQL函数通常是高度优化的,但可能有一些例外。 BENCHMARK()是一个很好的工具,可以找出某些功能是否是您的查询的问题。

8.13.2使用您自己的基准
对您的应用程序和数据库进行基准测试,以找出瓶颈所在。在修复一个瓶颈(或者用“ 虚拟 ”模块替换它)之后,您可以继续识别下一个瓶颈。即使您的应用程序的整体性能目前是可接受的,您至少应该为每个瓶颈制定计划,并决定如果有一天您真的需要额外的性能,如何解决它。

免费的基准测试套件是开源数据库基准测试,可从http://osdb.sourceforge.net/获得。

仅在系统负载很重时才会出现问题。我们有许多客户在生产(已测试)系统并遇到负载问题时与我们联系。在大多数情况下,性能问题可能是由于基本数据库设计问题(例如,高负载下的表扫描不好)或操作系统或库的问题。大多数情况下,如果系统尚未投入生产,这些问题将更容易解决。

为了避免这样的问题,在最糟糕的负载下对整个应用程序进行基准测试:

该mysqlslap程序可以是用于模拟由多个客户端同时发出查询产生的高负载有帮助的。请参见第4.5.9节“ mysqlslap - 加载仿真客户端”。

您还可以尝试使用基准测试程序包,例如SysBench和DBT2,可在 https://launchpad.net/sysbench和 http://osdldbt.sourceforge.net/#dbt2获得。

这些程序或软件包可以使系统瘫痪,因此请务必仅在开发系统上使用它们。