Skip to main content

1.测量表达式和函数的速度

要衡量性能,请考虑以下因素:

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

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

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

某些 MySQL 功能是否有助于提高性能取决于工作负载。 为了完整起见,请始终在打开和关闭这些功能的情况下测试性能。 每个工作负载要尝试的最重要的功能是 InnoDB 表的自适应哈希索引。

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

测量表达式和函数的速度

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

mysql> SELECT BENCHMARK(1000000,1+1);
+------------------------+
| BENCHMARK(1000000,1+1) |
+------------------------+
| 0 |
+------------------------+
1 row in set (0.32 sec)

该结果是在 Pentium II 400MHz 系统上获得的。 它表明MySQL可以在该系统上在0.32秒内执行1,000,000个简单的加法表达式。

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

使用自己的基准

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

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

仅当系统负载非常重时才会出现问题,这是很常见的情况。在大多数情况下,性能问题是由于基本数据库设计问题(例如,表扫描在高负载下不好)或操作系统或库问题造成的。 大多数时候,如果系统尚未投入生产,这些问题会更容易解决。

为了避免此类问题,请在最坏的可能负载下对整个应用程序进行基准测试:

这些程序或软件包可能会使系统崩溃,因此请确保仅在开发系统上使用它们。

使用 Performance_schema 衡量性能

可以查询 Performance_schema 数据库中的表,以查看有关服务器及其正在运行的应用程序的性能特征的实时信息。 有关详细信息,请参阅MySQL 性能架构相关文章。