亚马逊AWS官方博客
使用 Performance Insights 优化 Amazon RDS for MySQL
Original URL:https://amazonaws-china.com/cn/blogs/database/tuning-amazon-rds-for-mysql-with-performance-insights/
您可能还没有使用 RDS 参数组为数据库实例启用 MySQL Performance Schema。如果是这样,启用 Performance Insights 将会自动为您启用并配置 MySQL Performance Schema。有关 MySQL Performance Schema 与 Performance Insights 结合使用的更多信息,请参阅 Amazon RDS 用户指南中的启用 Performance Insights。
数据库负载
Performance Insights的核心指标称为数据库负载。数据库负载将数据库系统的总体性能状况浓缩为一个指标,反映了整个系统的压力水平。有关如何计算数据库负载的详细说明,请参阅 Amazon RDS 用户指南中的使用 Amazon RDS Performance Insights。
数据库负载图占据 Performance Insights 屏幕的顶部,按以下四个维度中的一个显示负载细分:等待、SQL、主机、用户。负载图最常用的维度是等待,它将告诉您数据库引擎中的哪种活动正在导致负载上升。负载图中的厚色带表示贡献最大的等待类型。
要选择某个时间段,请选择负载图右上部的时间跨度,或拖放放大负载图的任何部分。由于 MySQL 等待事件的名称描述性不强,我们将最常见的事件记录在 Amazon Aurora MySQL 参考中。虽然此文档针对的是 Aurora MySQL,但有关这些事件的描述也同样适用于 RDS MySQL。对于 AWS 文档没有涉及的等待事件,请参阅 MySQL 文档中的 Performance Schema 仪表板命名惯例。
为方便演示,下面我将使用一个跨度为一小时数据库负载图,它来自在 RDS MySQL 上运行的 sysbench OLTP 工作负载的 Performance Insights。 该工作负载是一个稳态读取密集型工作负载(读写比 90:10)。这对 OLTP 应用程序相当典型,演示了正常工作负载在Performance Insights中将会如何显示。
从图中可以看出,数据库负载的主要贡献因素为等待事件 io/table/sql/handler。根据 AWS 文档,这是一个表 I/O 等待事件。观察此工作负载,您会看到正常运行的工作负载会通过消耗 CPU 和 I/O 等基本的主机资源来产生负载。这些资源没有遇到瓶颈,系统可以正常工作。
如果不启用 MySQL Performance Schema 会是什么情况?
如果您有意禁用 MySQL Performance Schema,Performance Insights 仍会运行,但会以降级模式运行。您仍可看到数据库负载和Top SQL。但这时Performance Insights 不会显示 MySQL Performance Schema 等待事件,而是显示 MySQL 进程状态。进程状态值一般位于 show processlist 命令的 state 列。
Top 10 SQL 语句摘要
Performance Insights 页面的底部显示了在负载图中显示的时间段内,数据库负载的Top 10 SQL 语句摘要列表。此类别可帮助识别对系统影响最大的 SQL 语句,从而让您知道如何确定调整工作的重点。借助Performance Insights,您还可以选择任何其他支持的维度(等待、主机或用户)并显示Top 10对象。当然,Top 10列表中最常用的维度是 SQL。
MySQL 语句摘要是数据库中运行的 SQL 的简化版,但用问号替换了持续变化的字面值。借助摘要功能,Performance Insights 能够汇总上百个甚至上千个基本相同的 SQL 语句的影响。摘要还可以在Top 10列表中将这些语句的真正影响显示为一个单一逻辑 SQL 语句。
诊断问题
借助数据库负载指标,可以非常明了地确定数据库性能下降的时候。以下面的负载图为例。
该图显示了一个稳态工作负载在 io/table/sql/handler 事件中的高负载时期发生了中断。如前文所述,此事件是一个 I/O 事件。在此期间,有四到八个数据库连接处于等待状态,主要是在 I/O 方面。问题是为何为这样。解答该问题的第一步是在负载图上拖放以放大相关期间。
放大后,您可以看到在 I/O 等待严重时期涉及最多的 SQL 语句。
在问题发生期间,主要的 SQL 语句是一个大型表的更新,该语句没有 where 条件。这种操作可能会使用大量的 I/O,导致正常工作负载发生竞争。知道问题在于此 SQL 后,我们可以开始调查谁应该为此负责。为此,单击细分下拉菜单,然后选择用户。
将数据库负载按用户细分后,您可以立即找到须对运行违规查询负责的具体用户。该用户仅在负载突增期间出现。在Top SQL 列表中,您还可以看到违规查询仅由该用户运行。
小结
借助 Performance Insights,RDS MySQL 能够实现在 Oracle 等商业数据库引擎中常见、但在 MySQL 和 PostgreSQL 等开源数据库中不常见的可视化显示和细分功能。虽然开源引擎的用户对这种方法还不熟悉,但它能够简单、直观地显示性能问题的源头。
我们的团队正在紧锣密鼓地工作,以在未来推出更多有关Performance Insights 的增强。 如果您想提供反馈或请求增强,请给我们发电子邮件。