cpu - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

cpu

当线程在 CPU 中处于活动状态或正在等待 CPU 时,会发生 cpu 等待事件。

支持的引擎版本

以下引擎版本支持此等待事件信息:

  • Aurora MySQL 版本 2,最高 2.09.2

  • Aurora MySQL 版本 1,最高 1.23.1

Context

对于每个 vCPU,连接可以在此 CPU 上运行。在某些情况下,准备运行的活动连接数高于 vCPU 的数量。这种不平衡导致连接等待 CPU 资源。如果活动连接数始终高于 vCPU 的数量,则您的实例会遇到 CPU 争用情况。争用会导致 cpu 等待事件发生。

注意

CPU 的性能详情指标为 DBLoadCPUDBLoadCPU 的值可能与 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

等待次数增加的可能原因

当此事件的发生率超过正常(可能表示性能问题)时,典型原因包括以下几点:

  • 分析查询

  • 高度并发的事务

  • 长时间运行的事务

  • 连接数量突然增加,称为登录风暴

  • 上下文切换增加

Actions

如果 cpu 等待事件主导着数据库活动,它不一定表示性能问题。只在性能下降时应对此事件。

根据 CPU 利用率提高的原因,考虑以下策略:

  • 增加主机的 CPU 容量。这种方法通常只能提供临时的缓解。

  • 确定潜在优化的主要查询。

  • 如果适用,将一些只读工作负载重新导向到读取器节点。

确定导致问题的会话或查询

要查找会话和查询,请查看性能详情的主要 SQL 表格,以了解 CPU 负载最高的 SQL 语句。有关更多信息,请参阅 使用性能详情控制面板分析指标

通常,一两条 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 工作负载。另请参阅 Amazon Support 文章如何对 Amazon RDS for MySQL 实例上的的高 CPU 使用率进行故障排除和解决?

分析和优化高 CPU 工作负载

在确定提高 CPU 使用率的查询之后,您可以优化它们或结束连接。以下示例说明如何结束连接。

CALL mysql.rds_kill(processID);

有关更多信息,请参阅《Amazon RDS 用户指南》中的 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 CloudWatch DatabaseConnections 指标都有所提高。

  • CPU 中的线程数大于 vCPU 的数量。

如果上述条件为真,请考虑减少数据库连接的数量。例如,您可以使用 RDS 代理之类的连接池。要了解有效的连接管理和扩缩的最佳实践,请参阅白皮书 Amazon Aurora MySQL DBA 连接管理手册