cpu
当线程在 CPU 中处于活动状态或正在等待 CPU 时,会发生 cpu
等待事件。
支持的引擎版本
以下引擎版本支持此等待事件信息:
-
Aurora MySQL 版本 2 和 3
上下文
对于每个 vCPU,连接可以在此 CPU 上运行。在某些情况下,准备运行的活动连接数高于 vCPU 的数量。这种不平衡导致连接等待 CPU 资源。如果活动连接数始终高于 vCPU 的数量,则您的实例会遇到 CPU 争用情况。争用会导致 cpu
等待事件发生。
注意
CPU 的性能详情指标为 DBLoadCPU
。DBLoadCPU
的值可能与 CloudWatch 指标 CPUUtilization
的值不同。后一个指标是从 Hypervisor 中收集的,用于数据库实例。
性能详情操作系统指标提供有关 CPU 利用率的详细信息。例如,您可以显示以下指标:
-
os.cpuUtilization.nice.avg
-
os.cpuUtilization.total.avg
-
os.cpuUtilization.wait.avg
-
os.cpuUtilization.idle.avg
性能详情将数据库引擎的 CPU 使用情况报告为 os.cpuUtilization.nice.avg
。
等待次数增加的可能原因
当此事件的发生率超过正常(可能表示性能问题)时,典型原因包括以下几点:
-
分析查询
-
高度并发的事务
-
长时间运行的事务
-
连接数量突然增加,称为登录风暴
-
上下文切换增加
操作
如果 cpu
等待事件主导着数据库活动,它不一定表示性能问题。只在性能下降时应对此事件。
根据 CPU 利用率提高的原因,考虑以下策略:
-
增加主机的 CPU 容量。这种方法通常只能提供临时的缓解。
-
确定潜在优化的主要查询。
-
如果适用,将一些只读工作负载重新导向到读取器节点。
确定导致问题的会话或查询
要查找会话和查询,请查看性能详情的主要 SQL 表格,以了解 CPU 负载最高的 SQL 语句。有关更多信息,请参阅 使用 Performance Insights 控制面板分析指标。
通常,一两条 SQL 语句会占用大部分的 CPU 周期。把精力集中在这些语句上。假设您的数据库实例有 2 个数据库负载为 3.1 个平均活动会话 (AAS) 的 vCPU,且它们全部处于 CPU 状态。在这种情况下,您的实例受 CPU 限制。请考虑以下策略:
-
升级到具有更多 vCPU 的更大的实例类。
-
优化查询以降低 CPU 负载。
在此示例中,主要 SQL 查询的数据库负载为 1.5 个 AAS,全部处于 CPU 状态。另一条 SQL 语句在 CPU 状态下的负载为 0.1。在此示例中,如果停止了负载最低的 SQL 语句,不会显著降低数据库负载。但是,如果您优化两个高负载查询,使其效率提高一倍,就可以消除 CPU 瓶颈。如果将 1.5 个 AAS 的 CPU 负载减少 50%,则每条语句的 AAS 将降至 0.75。现在花在 CPU 上的总数据库负载为 1.6 个 AAS。该值低于 2.0 的最大 vCPU 行。
有关使用性能详情进行故障排除的有用概览,请参阅博客文章利用性能详情分析 Amazon Aurora MySQL 工作负载
分析和优化高 CPU 工作负载
在确定提高 CPU 使用率的查询之后,您可以优化它们或结束连接。以下示例说明如何结束连接。
CALL mysql.rds_kill(
processID
);
有关更多信息,请参阅mysql.rds_kill。
如果结束会话,该操作可能会触发长时间回滚。
遵循优化查询的指南
要优化查询,请考虑以下指南:
-
运行
EXPLAIN
语句。此命令显示运行查询所涉及的各个步骤。有关更多信息,请参阅 MySQL 文档中的使用 EXPLAIN 优化查询
。 -
运行
SHOW PROFILE
语句。使用此语句可查看配置文件详细信息,这些详细信息可以指示在当前会话期间运行的语句的资源使用情况。有关更多信息,请参阅 MySQL 文档中的 SHOW PROFILE 语句
。 -
运行
ANALYZE TABLE
语句。使用此语句刷新 CPU 占用量较高的查询访问的表的索引统计信息。通过分析语句,您可以帮助优化程序选择合适的执行计划。有关更多信息,请参阅 MySQL 文档中的 ANALYZE TABLE 语句
。
遵循提高 CPU 使用率的指南
要提高数据库实例中的 CPU 使用率,请遵循以下指南:
-
确保所有查询都使用正确的索引。
-
了解您是否可以使用 Aurora 并行查询。您可以使用此方法通过向下推送
WHERE
子句的函数处理、行筛选和列投影,减少头节点上的 CPU 使用率。 -
了解每秒 SQL 执行次数是否达到预期阈值。
-
了解索引维护或新索引创建是否占用生产工作负载所需的 CPU 周期。在活动高峰时间之外安排维护活动。
-
了解是否可以使用分区来帮助减少查询数据集。有关更多信息,请参阅博客文章如何计划和优化与 MySQL 兼容的 Amazon Aurora 以实现工作负载整合
。
检查连接风暴
如果 DBLoadCPU
指标不是很高,但 CPUUtilization
指标很高,则 CPU 使用率高的原因在于数据库引擎之外。一个典型的例子是连接风暴。
检查以下条件是否为真:
-
性能详情
CPUUtilization
指标和 Amazon CloudWatchDatabaseConnections
指标都有所提高。 -
CPU 中的线程数大于 vCPU 的数量。
如果上述条件为真,请考虑减少数据库连接的数量。例如,您可以使用 RDS 代理之类的连接池。要了解有效的连接管理和扩缩的最佳实践,请参阅白皮书 Amazon Aurora MySQL DBA 连接管理手册