随着不断增长的数据量和不断变化的工作负载增加了复杂性,现在有必要调整数据库性能以最大限度地提高资源利用率和系统性能。然而,性能调优往往说起来容易做起来难。
让我们面对现实吧,由于多种原因,调优很困难。一方面,它需要大量的专业知识才能理解执行计划,并经常更新或重写好的 SQL。最重要的是,调整通常非常耗时。总会有大量的 SQL 语句需要整理,这可能会导致不确定哪些特定语句需要调优;鉴于每条陈述都不同,调整方法也不同。
随着数据量的增长和技术变得越来越复杂,正确调整数据库以提供最终用户体验并降低基础架构成本变得越来越重要。性能调优可以帮助数据库专业人员快速识别瓶颈,通过审查查询执行计划来定位不足的操作,并消除任何猜谜游戏。
无论复杂程度或技能水平如何,以下 MySQL 性能调优技巧都将作为解决 MySQL 性能问题的分步指南,并有助于缓解性能调优经常带来的痛点。
收集基线指标
有效的数据收集和分析对于识别和纠正性能问题至关重要。也就是说,在性能调优开始之前,重要的是要设置对过程需要多长时间的预期,以及了解查询在完美世界中应该运行多长时间,无论是 1 秒、10 分钟还是一小时。
此阶段应包括收集所有基线指标,例如检查的行数和发送的行数,并记录查询现在运行了多长时间。收集等待和线程状态也很重要,例如系统阻塞、发送数据、计算统计数据和写入网络。这些等待状态提供了很好的线索,告诉我们应该把调整工作的重点放在哪里。
检查执行计划
在您努力为查询性能创建路线图时,制定执行计划非常重要。幸运的是,MySQL 提供了许多方法来选择执行计划和简单的导航来检查查询。例如,要获得计划的表格视图,请使用 EXPLAIN、Explain EXTENDED 或 Optimizer Trace。
要获得更加图形化的视图并深入了解执行计划的成本高昂的步骤,请使用 MySQL Workbench。这些计划从上到下列出了步骤、选择类型、表名、可能的目标键、键长度、引用和要读取的行数。此外,“额外列”将为您提供有关如何过滤、排序和访问数据的更多信息。
查看表格和索引
现在已经收集了指标并检查了执行计划,现在是检查查询中的表和索引信息的时候了,因为这些详细信息最终将为您的调优策略提供信息。首先,了解表所在的位置及其大小很重要。此外,查看键和约束以了解表之间的关系。另一个需要关注的领域是列的大小和构成——尤其是在“where”子句中。
可以用来获取表大小的一个小技巧是在命令行中使用语句“mysqlshow –status ”。此外,使用“show index from ”语句有助于检查索引及其基数,因为这将有助于推动执行计划。值得注意的是,确定索引是否为多列以及这些列在索引中的顺序。如果引用了左前列,MySQL 将只使用索引。
考虑 SQL 图表
收集并查看所有这些信息后,是时候开始调优了。通常,可能有太多可能的执行路径来解决性能不佳的查询,以至于优化器无法检查所有路径。为避免这种情况,一种有用的技术是 SQL 图表,它以数学方式提供问题视图,以帮助调优器最终找到比优化器更好的执行路径。SQL 图表也可以在调整时实现,以帮助暴露完整查询中的错误。很多时候,很难理解为什么优化器正在做它正在做的事情,但是 SQL 图表有助于为问题创建一个更清晰的路径,这可以使企业避免代价高昂的错误。
有效监控 MySQL 调优
监控很容易被遗忘,但它是确保解决数据库中的问题并保持解决的一个不可或缺的步骤。调整后,继续监控所做的改进很重要。为此,请务必进行新的指标测量并与初始读数进行比较,以证明调优有所不同。在持续监控过程之后,监控下一次调整机会至关重要,因为总有改进的余地。
通过响应时间分析识别 MySQL 瓶颈
如果应用程序速度变慢,并且您的最终用户抱怨,您需要快速找到问题的根本原因。传统的 MySQL 性能监控工具跟踪资源指标并关注服务器健康状况。
响应时间分析工具不同,因为它们关注的是时间,而不是资源指标——分析基于应用程序和数据库引擎正在等待的内容,这些内容在 MySQL 等待中捕获。响应时间分析是通过查看数据库引擎在哪里花费时间来解决复杂性能问题的最有效方法。它超越了识别查询执行时间或慢速查询来查明到底是什么导致查询变慢。
SolarWinds DPA等响应时间分析工具不仅仅显示等待时间或硬件指标——它们将等待时间与查询、响应时间、资源、存储性能、执行计划和其他维度相关联,让您能够了解发生了什么在您的数据库内部以及降低性能的原因。
性能调优 MySQL 的好处
了解驱动数据库性能的因素可以让您通过调整服务器规模和避免过度配置来降低成本。它还可以帮助您了解迁移到闪存或增加服务器容量是否会提高性能,如果是,提高多少。
与 IT 中的许多事情一样,数据库性能调整并非没有挑战。然而,调整被证明是值得的,因为它可以让企业物有所值,而不是简单地投入更多硬件来解决这个问题。