Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs 菜单
Docs 主页
/

MongoDB 性能

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

您可能会因不充分或不适当的索引策略或糟糕的模式设计模式而遇到性能限制。 锁定性能讨论了这些问题如何影响MongoDB 的内部锁定。

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

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

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

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

与锁相关的速度下降可能是间歇性的。要查看锁是否影响了性能,请参阅 锁部分和 输出的 globalLock serverStatus部分。

注意

MongoDB Atlas免费集群或 Flex 集群不会返回某些 serverStatus 响应字段。有关更多信息,请参阅MongoDB Atlas文档中的有限命令

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

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

如果globalLock.currentQueue.total 持续较高,则可能有许多请求在等待锁。这表明可能存在影响性能的并发问题。

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

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

  • 索引使用效率低下

  • 非最佳模式设计

  • 查询结构不佳

  • 系统架构问题

  • RAM不足导致磁盘读取

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

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

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

应用程序或驾驶员错误也可能导致连接数激增。所有官方支持的MongoDB驱动程序实现了连接池化,这允许客户端更有效地使用和重用连接。连接数量极高,尤其是在没有相应工作负载的情况下,通常表示驾驶员或其他配置错误。

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

MongoDB Atlas 根据集群层和类设置并发传入连接的限制。要了解详情,请参阅连接限制和集群层

后退

长时间运行的从节点读取

在此页面上