

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# CPU 利用率高
<a name="performance-high-cpu-utilization"></a>

CPU 利用率过高是您在使用 Amazon DocumentDB 时在某个时候可能会遇到的问题之一。本节提供解决问题的见解。

## 识别-发现问题
<a name="high-cpu-identification"></a>

Amazon DocumentDB 实例上的 CPU 使用率过高，会增加所有数据库操作的延迟，从而导致应用程序运行缓慢。当 Amazon DocumentDB CPU 使用率超过最佳水平时，查询执行时间会增加，连接建立所需的时间更长，应用程序的响应速度也会降低。主实例的 CPU 峰值会减慢写入操作，而副本上的 CPU 峰值会导致读取操作的延迟更高。

Amazon DocumentDB 中 CPU 使用率过高的一些常见原因可能是：
+ **集合扫描**：没有适当索引的查询会强制执行完整的集合扫描，从而消耗过多的 CPU 来检查每个文档。
+ **连接峰值**：应用程序连接的突然激增使身份验证和会话管理所需的 CPU 资源不堪重负。
+ **复杂聚合： Multi-stage 操作**（排序、分组、联接）消耗大量的 CPU，尤其是在没有优化索引的大型数据集上。
+ **查询效率低下**：扫描大型结果集和正则表达式操作会导致 CPU 使用率过高。
+ **Write-Heavy 工作负载**：频繁的更新和批量插入会给CPU带来文档处理、索引更新和事务日志的压力。

## 调查-收集指标
<a name="high-cpu-investigate"></a>

亚马逊 DocumentDB 通过亚马逊提供监控。 CloudWatchAmazon DocumentDB 指标可以大致分为集群级别和实例级指标。对于与 CPU、内存和连接相关的资源，请查看实例级别的指标，因为资源消耗是特定于实例的。确定显示 CPU 峰值的实例（主实例或副本），并记下峰值时间。

的 CPU 使用率 CloudWatch 指标`CPUUtilization`。

## 诊断-找出根本原因
<a name="high-cpu-diagnose"></a>

在确定了 CPU 峰值的实例和时间表之后，接下来是诊断对 CPU 使用率有很大影响的原因。由于可能导致 CPU 峰值的原因有很多，因此让我们先确定是什么原因造成的：

**连接**：检查 CloudWatch 指标，`DatabaseConnections`包括`DatabaseConnectionsMax`，如果连接出现峰值并且与 CPU 峰值时间相吻合，则短时间内的连接激增很可能是 CPU 峰值的原因。

**查询**：如果不是连接，则可能是查询造成的。如果您已启用性能见解，请转到该实例的性能见解控制台并查看有关该实例的查询。要查看查询的另一件事来自探查器。

## 解决-修复问题
<a name="high-cpu-resolve"></a>

**连接爆发**：如果连接爆发是导致 CPU 峰值的原因，请考虑在应用程序中重复使用连接或实现连接池。有关优化高连接的更多信息，请参阅[Amazon DocumentDB 的连接问题](performance-connection-issues.md)。

**查询分布**：如果 CPU 峰值是由主实例上的读取查询引起的，如果您的查询结果最终可以保持一致，请考虑将读取操作重定向到副本实例。

**查询优化**：如果一个查询或一组查询导致 CPU 峰值，请考虑优化查询，例如在查询未使用索引的情况下添加索引。有关优化查询的更多信息，请参阅[查询运行缓慢](performance-slow-queries.md)。

**实例扩展**：如果经过优化后 CPU 利用率一直很高，请升级到具有更大 CPU 容量的更大实例类别，以有效处理您的工作负载需求。

**无服务器**：对于导致短期 CPU 峰值的不可预测的工作负载，可以考虑使用。[使用 Amazon DocumentDB 无服务器](docdb-serverless.md)无服务器实例可根据需求自动扩展资源，无需为此类工作负载预置固定实例大小。