对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

MongoDB 性能

使用 MongoDB 开发和操作应用程序时,您可能需要分析应用程序及其数据库的性能。性能下降的原因通常是数据库访问策略、硬件可用性和打开的数据库连接数量。

You may experience performance limitations from inadequate or inappropriate indexing strategies or poor schema design patterns. Locking Performance discusses how these can impact MongoDB's internal locking.

性能问题可能表明数据库正在满负荷运行,应为数据库增设更多容量。具体而言,应用程序的工作集应与可用物理内存适配。

在某些情况下,性能问题可能是暂时的,并且与异常流量负载有关。如连接数中所述,扩展可以帮助减少过多的流量。

数据库分析可帮助您了解哪些操作导致性能下降。

MongoDB 使用锁定系统来确保数据集一致性。如果某些操作运行时间过长或形成队列,则性能会随着请求和操作等待锁定而下降。

与锁相关的减速可能是间歇性的。要查看该锁是否影响了您的性能,请参阅 输出的 锁serverStatus 部分和 全局锁 部分。

注意

Some serverStatus response fields are not returned on MongoDB Atlas Free clusters or Flex clusters. For more information, see Free and Flex in the MongoDB Atlas documentation.

将 locks.<type>.timeAcquiringMicros 除以 locks.<type>.acquireWaitCount 可以得出特定锁模式的大致平均等待时间。

locks.<type>.deadlockCount 提供锁获取遇到死锁的次数。

如果 globalLock.currentQueue.total 一直处于高位,则可能有大量请求在等待锁。这表明可能存在影响性能的并发问题。

如果 globalLock.totalTime 相对于 uptime 较高,则数据库处于锁定状态已有很长时间。

长查询可能由以下原因导致:

  • 索引使用无效

  • 非最优模式设计

  • 查询结构不佳

  • 系统架构问题

  • 内存不足导致磁盘读取

在某些情况下,应用程序和数据库之间的连接数可能会超过服务器处理请求的能力。serverStatus 文档中的以下字段可以提供洞察:

许多并发的应用程序请求可能会使服务器无法跟上需求。如果是这种情况,请增加部署的容量。

对于写入密集型应用程序,应部署分片,并将一个或多个分片添加到分片集群中,以在 mongod 实例之间分配负载。

连接数量激增也可能是应用程序或驱动程序错误造成的。所有官方支持的 MongoDB 驱动程序都实现了连接池化,它可以使客户端更高效地使用和重用连接。极高的连接数量,特别是没有相应的工作负载时,通常表明存在驱动程序或其他配置错误。

除非受到系统范围的限制,否则 MongoDB 支持的最大传入连接数将使用 maxIncomingConnections 设置进行配置。在基于 Unix 的系统上,可以使用 ulimit 命令或编辑系统的 /etc/sysctl 文件来修改系统范围的限制。有关更多信息,请参阅 UNIX ulimit 自我管理部署的设置。

MongoDB Atlas sets the limit for concurrent incoming connections based on the cluster tier and class. To learn more, see Connection Limits and Cluster Tier in the Atlas documentation.

给本页内容打分

在此页面上