首页 > 数据库 > > MongoDB 性能
参考官方文档:
https://docs.mongodb.com/manual/administration/analyzing-mongodb-performance/
锁性能
MongDB使用锁系统来确保数据的一致性。如果某些操作长时间运行或队列形成,则性能将随着请求和操作的锁等待而降低。
与锁相关的损耗可能是间歇性的。 要查看锁是否影响了性能,请参阅serverStatus输出的locks部分和globalLock部分。
通过locks.acquireWaitCount划分locks.timeAcquiringMicros可以给出特定锁定模式的近似平均等待时间。
locks.deadlockCount提供锁定获取遇到死锁的次数。
如果globalLock.currentQueue.total一直很高,那么大量请求可能正在等待锁定。 这表明可能会有影响性能的并发问题。
如果globalLock.totalTime相对于正常运行时间较高,则数据库在锁定状态下已存在很长时间。
索引的无效使用会导致长查询; 非最优方案设计; 差的查询结构; 系统架构问题; 或RAM不足导致页面错误和磁盘读。
内存使用
使用MMAPv1存储引擎,MongoDB使用内存映射文件来存储数据。 给定足够大小的数据集,mongod进程将分配系统上的所有可用内存供其使用。
虽然这是有意的并且有助于性能,但是内存映射文件使得难以确定RAM的数量是否足以用于数据集。
serverStatus输出的内存使用状态量可以提供对MongoDB内存使用的深入了解。
mem.resident字段提供正在使用的驻留内存量。 如果这超出系统内存量并且磁盘上存在大量不在RAM中的数据,则可能超出了系统容量。
您可以检查mem.mapped以检查mongod正在使用的映射内存量。 如果此值大于系统内存量,则某些操作将需要page faults才能从磁盘读取数据。
Page Faults
使用MMAPv1存储引擎时,因为MongoDB会将数据读取或写入当前未位于物理内存中的部分数据文件,可能会发生页面错误。相反,当物理内存耗尽且物理内存页面交换到磁盘时,会发生操作系统页面错误。
MongoDB将触发的页面错误报告为一秒钟内的页面错误总数。要检查页面错误,请参阅serverStatus输出中的extra_info.page_faults值。
MongoDB页面错误计数器的快速增加可能表明服务器的物理内存太少。访问大型数据集或扫描整个集合时也可能发生页面错误。
单个page fault 会很快完成,并且没有问题。但是,总体而言,大量页面错误通常表明MongoDB正在从磁盘读取过多数据。
MongoDB经常在页面错误后“yield”读锁定,允许其他数据库进程读取而mongod将下一页加载到内存中。在页面错误之后产生读锁定可以提高并发性,并且还可以提高大容量系统的整体吞吐量。
增加MongoDB可访问的RAM量可能有助于降低页面错误的频率。如果无法做到这一点,您可能需要考虑部署分片群集或向部署添加分片以在mongod实例之间分配负载。
连接数
在某些情况下,应用程序和数据库之间的连接数可能会超过服务器处理请求的能力。 serverStatus文档中的以下字段可以提供观察信息:
FTDC收集以下命令在文件轮询或启动时生成的统计信息:
mongod进程将FTDC数据文件存储在实例storage.dbPath下的diagnostic.data目录中。 所有诊断数据文件都存储在此目录下。 例如,给定的dbPath 是 /data/db,诊断数据目录将是/data/db/diagnostic.data。
mongos进程将FTDC数据文件存储在相对于systemLog.path日志路径设置的诊断目录中。 MongoDB截断了logpath的文件扩展名,并将diagnostic.data连接到剩余的名称。 例如,给定/var/log/mongos.log的路径设置,诊断数据目录将是/var/log/mongos.diagnostic.data。
FTDC使用以下默认值运行:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3148891/ ,如需转载,请注明出处,否则将追究法律责任。