文档菜单
文档首页
/
MongoDB 手册
/

MongoDB 性能

在本页

  • 锁定性能
  • 连接数

在使用MongoDB开发和运营应用程序时,您可能需要分析应用程序及其数据库的性能。当您遇到性能下降时,这通常与数据库访问策略、硬件可用性和打开数据库连接的数量有关。

一些用户可能会因为索引策略不足或不适当,或者因为糟糕的模式设计而遇到性能限制。锁定性能讨论了这些如何影响MongoDB的内部锁定。

性能问题可能表明数据库正在达到容量,需要增加数据库的额外容量。特别是,应用程序的工作集应适合可用的物理内存。

在某些情况下,性能问题可能是临时的,与异常流量负载有关。如连接数量部分所述,扩展可以帮助缓解过度的流量。

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

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

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

注意

某些serverStatus响应字段在MongoDB Atlas M0/M2/M5集群上不返回。有关更多信息,请参阅MongoDB Atlas文档中的受限制的命令

locks.<type>.timeAcquiringMicros 除以 locks.<type>.acquireWaitCount 可以得到特定锁模式的平均等待时间的近似值。

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

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

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

长时间查询可能是由于索引使用不当;不优化的模式设计;查询结构不良;系统架构问题;或内存不足导致的磁盘读取。

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

  • connections 是以下两个字段的容器

如果有大量的并发应用程序请求,数据库可能难以跟上需求。如果是这种情况,增加部署的容量。

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

连接数的峰值也可能是应用程序或驱动程序错误的结果。所有官方支持的 MongoDB 驱动程序都实现了连接池,允许客户端更有效地使用和重用连接。极端高数量的连接,尤其是没有相应的工作负载,通常表明驱动程序或其他配置错误。

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

MongoDB Atlas根据集群层和类别设置并发传入连接的限制。有关更多信息,请参阅Atlas文档中的连接限制和集群层

返回

开发清单