如何排查并解决 DocumentDB 实例上的高 CPU 使用率的问题?
上次更新时间:2020 年 6 月 17 日
我遇到 Amazon DocumentDB(与 MongoDB 兼容)实例上的高 CPU 使用率的问题。如何解决高 CPU 使用率?
简短描述
Amazon DocumentDB 实例上的 CPU 使用率可能会由于以下原因而增加:
- 用户启动的繁重的工作负载
- 非高效查询
- 在集群中超负荷使用写入器或特定的数据库实例,而不是平衡集群内的负载。
使用以下资源来排查 CPU 性能问题:
- 要确定数据库实例运行缓慢的原因,请参阅如何确定系统突然运行缓慢的原因?
- 要确定和终止在数据库实例上长时间运行查询,请参阅如何查找并终止长时间运行或受阻的查询?
- 要检查某个查询是否正在进行,请参阅如何了解查询何时取得进展?
- 要确定查询长时间运行的原因,请参阅如何查看查询计划和优化查询?
解决方法
使用 replicaSet 拆分工作负载
如果您的 DocumentDB 集群具有多个数据库实例,请检查写入器 CPU 是否较高,并且读取器处于闲置状态。这意味着写入器过载。
为解决此问题,请使用 replicaSet 拆分工作负载,或使用多个连接池将读取查询路由到读取器数据库实例。
为您的连接指定 readPreference
以副本集连接时,您可以为连接指定 readPreference。如果您指定 secondaryPreferred 的读取首选项,客户端会将读取查询路由到您的副本,将写入查询路由到您的主数据库实例。以下示例显示了 Python 中的连接字符串:
## Create a MongoDB client, open a connection to Amazon DocumentDB as a
## replica set and specify the read preference as secondary preferred
注意:只读副本的读取为最终一致性。
将一个或多个读取器实例添加到集群
如果您的 DocumentDB 集群具有单一数据库实例(仅限写入器),将一个或多个读取器数据库实例添加到集群。然后,使用 readPreference=secondaryPreferred 高效处理负载。
使用 Profiler 确定慢速查询
如果负载在所有副本之间均匀分布,请使用 profiler 确定一段时间的慢速查询。
扩展您的数据库实例的实例类
您还可以扩展 DocumentDB 集群中数据库实例的的实例类来处理工作负载。
注意:扩展实例类会增加成本。 请参阅 DocumentDB 定价以了解更多信息。