使用MongoDB开发和操作应用程序时,可能需要分析应用程序及其数据库的性能。当您遇到性能下降时,它通常是数据库访问策略,硬件可用性和打开的数据库连接数的函数。
由于索引策略不足或不适当,或者架构设计模式不佳,某些用户可能会遇到性能限制。锁定性能讨论了这些因素如何影响MongoDB的内部锁定。
性能问题可能表明数据库正在以最大容量运行,是时候向数据库添加附加容量了。特别是,应用程序的工作集应适合可用的物理内存。
在某些情况下,性能问题可能是暂时的,并且与流量异常负载有关。如“连接数”中所述,扩展可以帮助缓解过多的流量。
数据库分析可以帮助您了解导致降级的操作。
MongoDB使用锁定系统来确保数据集的一致性。如果某些操作长时间运行或形成队列,则性能将随着请求和操作等待锁定而降低。
与锁定有关的减速可能是间歇性的。要查看锁定是否已影响您的性能,请参考输出的“ 锁定”
部分和“ globalLock”部分
serverStatus
。
除locks.timeAcquiringMicros
通过
locks.acquireWaitCount
给个大概平均等待时间为特定的锁定模式。
locks.deadlockCount
提供锁获取遇到死锁的次数。
如果globalLock.currentQueue.total
一直很高,则可能有大量请求正在等待锁定。这表明可能存在并发问题,可能会影响性能。
如果globalLock.totalTime
相对于较高uptime
,则数据库已处于锁定状态已有相当长的时间。
无效查询可能导致长时间查询;非最佳模式设计;查询结构不良;系统架构问题;或RAM不足导致磁盘读取。
在某些情况下,应用程序与数据库之间的连接数量可能会使服务器处理请求的能力不堪重负。serverStatus
文档中的以下字段可提供洞察力:
connections
是以下两个字段的容器:connections.current
连接到数据库实例的当前客户端总数。connections.available
可用于新客户端的未使用的连接总数。如果有大量并发应用程序请求,则数据库可能难以满足需求。如果是这种情况,那么您将需要增加部署的容量。
对于需要大量读取的应用程序,请增加副本集的大小,然后将读取操作分配给辅助成员。
对于写密集型应用程序,部署分片并添加一个或多个
碎片的分片集群分布之间的负载
mongod
情况。
连接数量的尖峰也可能是应用程序或驱动程序错误的结果。所有官方支持的MongoDB驱动程序都实现连接池,这使客户端可以更有效地使用和重用连接。连接数量过多(尤其是没有相应的工作量)通常表示驱动程序或其他配置错误。
除非受到系统范围的限制的约束,否则MongoDB支持的最大传入连接数将通过该maxIncomingConnections
设置进行配置
。在基于Unix的系统上,可以使用ulimit
命令或通过编辑系统/etc/sysctl
文件来修改系统范围的限制。有关
更多信息,请参见UNIX ulimit设置。
该数据库配置收集有关针对的mongod实例运行操作的详细信息。探查器的输出可帮助识别效率低下的查询和操作。
您可以为单个数据库或mongod
实例上的所有数据库启用和配置概要分析。Profiler设置仅影响单个mongod
实例,并且不会在副本集或分片群集中传播。
提供以下分析级别:
水平 | 描述 |
---|---|
0 |
探查器已关闭,并且不收集任何数据。这是默认的探查器级别。 |
1 |
剖析器收集的数据花费的时间超过的值slowms 。 |
2 |
探查器收集所有操作的数据。 |
注意
当logLevel
设置为0
,MongoDB的记录速度慢
,在所确定的速度诊断日志操作
slowOpSampleRate
。从MongoDB 4.2开始,副本集的辅助副本将记录所有花费比慢操作阈值更长的时间来应用的oplog条目消息,而不管采样率如何。
在更高的logLevel
设置下,所有操作都将在诊断日志中显示,而不管其等待时间如何,但以下情况除外:次要对象记录慢速oplog条目消息。辅助节点仅记录慢速操作日志条目;增加logLevel
不会记录所有操作日志条目。
从MongoDB 4.2开始,用于读取/写入操作的事件探查器条目和诊断日志消息(即mongod / mongos日志消息)包括:
为了方便MongoDB的公司的工程师MongoDB服务器行为分析,mongod
以及mongos
处理包括全职诊断数据收集(FTDC)机制。FTDC数据文件经过压缩,不可读,并且继承了与MongoDB数据文件相同的文件访问权限。只有具有FTDC数据文件访问权限的用户才能传输FTDC数据。MongoDB Inc.工程师无法独立于系统所有者或操作员访问FTDC数据。默认情况下,MongoDB进程在FTDC上运行。有关MongoDB支持选项的更多信息,请访问
MongoDB支持入门。
FTDC隐私
FTDC数据文件已压缩且无法读取。未经系统所有者或操作员的明确许可和帮助,MongoDB Inc.工程师无法访问FTDC数据。
FTDC数据永远不会包含以下任何信息:
FTDC数据包含某些主机信息,例如主机名,操作系统信息以及用于启动mongod
或
的选项或设置mongos
。某些组织或监管机构可能认为此信息受保护或机密,但通常不将其视为个人身份信息(PII)。对于在这些字段中配置了受保护的,机密的或PII数据的集群,请在发送FTDC数据之前通知MongoDB Inc.工程师,以便可以采取适当的措施。
FTDC定期收集以下命令产生的统计信息:
根据主机操作系统,诊断数据可能包括以下一项或多项统计信息:
FTDC收集以下命令在文件旋转或启动时产生的统计信息:
mongod
进程将FTDC数据文件存储
diagnostic.data
在实例下的目录中
storage.dbPath
。所有诊断数据文件都存储在此目录下。例如,给定dbPath
为/data/db
,则诊断数据目录将为
/data/db/diagnostic.data
。
mongos
进程将FTDC数据文件存储在相对于systemLog.path
日志路径设置的诊断目录中。MongoDB将截断日志路径的文件扩展名,并将其连接diagnostic.data
为其余名称。例如,给定path
设置
/var/log/mongodb/mongos.log
,诊断数据目录将为
/var/log/mongodb/mongos.diagnostic.data
。
FTDC使用以下默认值运行:
diagnostic.data
文件夹最大大小为200MB 。这些默认值旨在向MongoDB Inc.工程师提供有用的数据,而对性能或存储大小的影响最小。仅当MongoDB Inc.工程师出于特定诊断目的要求时,才需要修改这些值。
您可以在MongoDB Github存储库上查看FTDC源代码
。这些ftdc_system_stats_*.ccp
文件专门定义捕获的任何特定于系统的诊断数据。
要禁用FTDC,请使用配置文件中设置所指定的
选项
启动mongod
或
:mongos
diagnosticDataCollectionEnabled: false
setParameter
在MongoDB Inc.工程师的支持下,禁用FTDC可能会增加分析或调试问题时所需的时间或资源。