在某些时候,你可能注定需要从MySQL获得更高的性能。但是你应该通过改善什么来提高性能呢?改进一个特定的查询,改进你的数据库表结构,还是改进你的硬件?知道这些的唯一方法是测量你的系统正在做什么,并且得到它在各种情况下的性能。这也是为什么我们把这章放在本书开始的原因。
最好的策略是找到并加强你的应用中组件链里最脆弱的一环。这在你不知道目前或者未来是什么在影响性能的情况下尤其有效。
水平测试(Benchmarking)和垂直测试(profiling)是两个发现瓶颈的最基本实践方法。这两者互相关联,但是又不尽相同。水平测试测量的是你系统的整体性能。这可以帮助你明确一个系统的能力,帮助你明确哪些改变会对系统性能造成影响而哪些不会,帮助你了解在不同的数据下你的系统的表现会怎么样。
与水平测试不同,垂直测试帮助你找到你的系统在哪里花费的时间最多或者在哪里耗费的资源最多。换句话说,水平测试解决“这个系统的性能有多强?”的问题,而垂直测试解决“这个系统的性能为什么这么强?”的问题。
这一章分成两个部分,一个是水平测试,另外一个是垂直测试。开始我们会讨论一下进行水平测试的原因和测试思想,然后介绍一下具体的水平测试技巧。我们将会给读者展示如何计划和设计一个水平测试,如何得到精确的结果,如果运行水平测试以及如何分析结果。第一部分的最后我们将会向读者展示一系列的水平测试工具以及如何使用其中几种的例子。
本章的其余部分懂不了如何对应用和MySQL进行垂直测试。我们将会展示我们在生产环境里使用的现实的垂直测试代码来帮助用户分析应用的性能。我们也将会向读者展示如何记录MySQL查询的日志,分析这些日志,以及如何使用MySQL的状态计数器以及其他的一些工具来分析MySQL以及你的查询语句到底在做些什么。
注:这里将Benchmark翻译为水平测试,而将Profile翻译为垂直测试。我在网上找了好久,也请教了一些人,但是没有一个对Benchmark和Profile比较官方的翻译,因此根据上面对这两个的定义,我觉得水平测试和垂直测试还是比较能表达这两者的实际意思的,因此在后文中就使用“水平测试”和“垂直测试”这两种叫法了。