cpu - Amazon Aurora

cpu

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

支持的引擎版本

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

  • Aurora MySQL 版本 2 和 3

上下文

对于每个 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

等待次数增加的可能原因

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

  • 分析查询

  • 高度并发的事务

  • 长时间运行的事务

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

  • 上下文切换增加

操作

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

分析和优化高 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 CloudWatch DatabaseConnections 指标都有所提高。

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

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