MongoDB-CN-Manual
  • MongoDB中文手册|官方文档中文版
  • MongoDB用户手册说明
  • MongoDB简介
    • 入门
    • 数据库和集合
      • 视图
      • 按需物化视图
      • 封顶集合
      • 时间序列集合
    • 文档
    • BSON类型
      • Comparison and Sort Order
      • MongoDB Extended JSON (v2)
      • MongoDB Extended JSON (v1)
  • 安装 MongoDB
    • 安装MongoDB社区版
      • 在Linux上安装MongoDB社区版
      • 在macOS上安装MongoDB社区版
      • 在Windows上安装MongoDB社区版
    • 安装MongoDB企业版
      • 在Linux上安装MongoDB企业版
      • 在Mac OS安装MongoDB企业版
      • 在Windows安装MongoDB企业版
      • 使用Docker安装MongoDB企业版
    • 将社区版MongoDB升级到企业版MongoDB
    • 验证MongoDB软件包的完整性
  • The mongo Shell
    • 配置mongo Shell
    • 使用 mongo Shell帮助
    • 为mongo Shell编写脚本
    • mongo Shell中的数据类型
    • mongo Shell 快速参考
  • MongoDB CRUD操作
    • 插入文档
      • 插入方法
    • 查询文档
      • 在mongo Shell中迭代游标
      • 从查询返回的项目字段
      • 查询嵌入式文档数组
      • 查询数组
      • 查询空字段或缺少字段
      • 查询嵌入/嵌套文档
    • 更新文档
      • 更新方法
      • 聚合管道更新
    • 删除文档
      • 删除方法
    • 地理空间查询
      • 用地理空间查询查找餐馆
      • GeoJSON对象
    • 批量写入操作
    • 可重试写入
    • 可重试读取
    • SQL到MongoDB的映射图表
    • 文本搜索
      • 文本索引
      • 文本索引操作
      • 集合管道中的文本索引
      • 文本索引语言
    • Read Concern读关注
      • 读关注 "local"
      • 读关注 "available"
      • 读关注 "majority"
      • 读关注 "linearizable"
      • 读关注 "snapshot"
    • Write Concern写关注
    • MongoDB CRUD概念
      • 原子性和事务
      • 读隔离性,一致性和近因性
        • 因果一致性和读写关注
      • 分布式查询
      • 通过findAndModify进行线性化读取
      • 查询计划
      • 查询优化
        • 评估当前操作性能
        • 优化查询性能
        • 写操作性能
        • 说明结果
      • 分析查询表现
      • Tailable 游标
  • MongoDB聚合
    • 聚合管道
      • 聚合管道优化
      • 聚合管道限制
      • 聚合管道和分片集合
      • 使用 Zip Code 数据集进行聚合
      • 使用用户首选项数据进行聚合
    • Map-Reduce
      • Map-Reduce 和分片集合
      • Map-Reduce 并发
      • Map-Reduce 示例
      • 执行增量 Map-Reduce
      • 对 Map Function 进行故障排除
      • 排除 Reduce Function 问题
      • Map-Reduce转换到聚合管道
    • 聚合参考
      • 聚合管道快速参考
      • 聚合命令
      • 聚合命令对比
      • 聚合表达式中的变量
      • SQL 到聚合映射图表
  • MongoDB数据模型
    • 数据建模介绍
    • 模式验证
    • 数据模型设计
      • 一对一嵌套关系模型
  • MongoDB事务
  • MongoDB事务
    • 驱动程序 API
    • 生产注意事项
    • 生产注意事项 (分片集群)
    • 事务操作
  • MongoDB索引
    • 单字段索引
    • 复合索引
    • 多键索引
      • 多键索引范围
    • 文本索引
      • 为文本索引指定语言
      • 指定文本索引的名称
      • 用权重控制搜索结果
      • 限制扫描条目的数量
    • 通配符索引
      • 通配符索引限制
    • 2dsphere 索引
      • 查询一个2dsphere索引
    • 2d 索引
      • 创建一个2d索引
      • 查询一个2d索引
      • 2d索引内部
      • 使用球面几何计算距离
    • geoHaystack 索引
      • 创建Haystack索引
      • 查询Haystack索引
    • 哈希索引
    • 索引特性
      • TTL 索引
        • 通过设置TTL使集合中的数据过期
      • 唯一索引
      • 部分索引
      • 不分大小写索引
      • Sparse 索引
    • 在填充的集合上建立索引
      • 在副本集上建立滚动索引
      • 在分片群集上建立滚动索引
    • 索引交集
    • 管理索引
    • 衡量索引使用
    • 索引策略
      • 创建索引来支持查询
      • 使用索引对查询结果进行排序
      • 确保索引适合RAM
      • 创建以确保选择性的查询
    • 索引参考
  • MongoDB安全
    • 安全检查列表
    • 启用访问控制
    • 身份验证
      • 用户
        • 添加用户
        • 权限认证机制
          • SCRAM
            • 用x.509证书来认证客户端
    • 审计
      • 配置审计过滤器
      • 配置审计
      • 系统事件审计消息
    • 网络和配置强化
    • 安全参考
      • system.roles集合
      • system.users集合
      • 资源文档
      • 权限操作
    • 附录
      • 附录-A-用于测试的 OpenSSl CA 证书
      • 附录-B-用于测试的OpenSSL服务器证书
      • 附录-C-用于测试的OpenSSL客户端证书
  • Change Streams变更流
    • 变更流生产建议
    • 变更事件
  • MongoDB复制
    • 副本集成员
    • 副本集日志
    • 副本集数据同步
    • 副本集部署架构
    • 副本集成员配置教程
    • 副本集维护教程
    • MongoDB复制参考
  • MongoDB分片
    • 分片集群组件
    • 分片键
    • 哈希分片
    • 范围分片
    • 区
      • 管理分片区
      • 按位置细分数据
      • 用于更改SLA或SLO的分层硬件
      • 按应用或客户细分数据
      • 仅插入工作负载的分布式本地写入
      • 管理分片区
    • 使用块进行数据分区
      • 在分片集群中拆分数据块
    • 分片管理
      • 查看集群设置
    • 重启一个分片集群
    • [把一个分片集群迁移到不同的硬件](fen-pian/migrate-a -sharded-cluster-to-different-hardware.md)
    • 分片参考
  • MongoDB管理
    • 产品说明
    • 操作检查列表
    • 开发检查列表
    • 配置和维护
    • 性能
    • 数据中心意识
      • MongoDB部署中的工作负载隔离
      • 区
        • 管理分片区
        • 按位置细分数据
        • 用于更改SLA或SLO的分层硬件
        • 按应用或客户细分数据
        • 仅插入工作负载的分布式本地写入
        • 管理分片区
    • MongoDB备份方法
    • MongoDB监控
  • MongoDB存储
    • 存储引擎
      • WiredTiger 存储引擎
      • 内存存储引擎
    • 日志记录
      • 管理日志记录
        • GridFS
        • FAQ:MongoDB 存储
  • MongoDB参考
    • 运算符
      • 查询与映射运算符
        • 比较查询运算符
          • $eq
          • $gt
          • $gte
          • $in
          • $lt
          • $lte
          • $ne
          • $nin
        • 逻辑查询运算符
          • $and
          • $not
          • $nor
          • $or
        • 元素查询运算符
        • 评估查询运算符
        • 地理空间查询运算符
        • 数组查询运算符
        • 按位查询运算符
        • $comment
        • 映射运算符
      • 更新运算符
        • 字段更新运算符
        • 数组更新运算符
        • 按位更新运算符
      • 聚合管道阶段
      • 聚合管道操作符
        • $abs (aggregation)
        • $acos (aggregation)
        • $acosh (aggregation)
        • $add (aggregation)
        • $addToSet (aggregation)
        • $allElementsTrue (aggregation)
        • $and (aggregation)
        • $anyElementTrue (aggregation)
        • $arrayElemAt (aggregation)
        • $arrayToObject (aggregation)
        • $asin (aggregation)
        • $asinh (aggregation)
        • $atan (aggregation)
        • $atan2 (aggregation)
        • $atanh (aggregation)
        • $avg (aggregation)
        • $ceil (aggregation)
        • $cmp (aggregation)
        • $concat (aggregation)
        • $concatArrays (aggregation)
        • $cond (aggregation)
        • $convert (aggregation)
        • $cos (aggregation)
        • $dateFromParts (aggregation)
        • $dateToParts (aggregation)
        • $dateFromString (aggregation)
        • $literal (aggregation)
      • 查询修饰符
    • 数据库命令
      • 聚合命令
      • 地理空间命令
      • 查询和写操作命令
      • 查询计划缓存命令
      • 认证命令
      • 用户管理命令
      • 角色管理命令
      • 复制命令
      • 分片命令
      • 会话命令
      • 管理命令
      • 诊断命令
      • 免费监控命令
      • 系统事件审计命令
    • mongo Shell 方法
      • 集合方法
        • db.collection.aggregate()
        • db.collection.bulkWrite()
        • db.collection.copyTo()
        • db.collection.count()
        • db.collection.countDocuments()
        • db.collection.estimatedDocumentCount()
        • db.collection.createIndex()
        • db.collection.createIndexes()
        • db.collection.dataSize()
        • db.collection.deleteOne()
        • db.collection.deleteMany()
        • db.collection.distinct()
        • db.collection.drop()
        • db.collection.dropIndex()
        • db.collection.dropIndexes()
        • db.collection.ensureIndex()
        • db.collection.explain()
        • db.collection.find()
        • db.collection.findAndModify()
        • db.collection.findOne()
        • db.collection.findOneAndDelete()
        • db.collection.findOneAndReplace()
        • db.collection.findOneAndUpdate()
        • db.collection.getIndexes()
        • db.collection.getShardDistribution()
        • db.collection.getShardVersion()
        • db.collection.insert()
        • db.collection.insertOne()
        • db.collection.insertMany()
        • db.collection.isCapped()
        • db.collection.latencyStats()
        • db.collection.mapReduce()
        • db.collection.reIndex()
        • db.collection.remove()
        • db.collection.renameCollection()
        • db.collection.replaceOne()
        • db.collection.save()
        • db.collection.stats()
        • db.collection.storageSize()
        • db.collection.totalIndexSize()
        • db.collection.totalSize()
        • db.collection.update()
        • db.collection.updateOne()
        • db.collection.updateMany()
        • db.collection.watch()
        • db.collection.validate()
    • MongoDB中的限制与阈值
    • MongoDB系统集合
    • 词汇表
    • 默认的MongoDB端口
    • 默认的MongoDB读/写关注
    • 服务器会话
  • MongoDB FAQ
    • FAQ: MongoDB基础知识
    • FAQ: MongoDB索引
    • FAQ: MongoDB并发
    • FAQ: MongoDB分片
    • FAQ: MongoDB复制和副本集
    • FAQ: MongoDB存储
    • FAQ: MongoDB诊断
  • MongoDB 版本管理
  • 联系我们
    • Tapdata Cloud
    • MongoDB中文社区
    • 社区合作伙伴—锦木信息
由 GitBook 提供支持
在本页
  • 锁性能
  • 连接数
  • 数据库性能
  • 诠释诊断数据采集
  1. MongoDB管理

性能

上一页配置和维护下一页数据中心意识

最后更新于3年前

在本页

当您开发和操作基于MongoDB的应用时,您或许需要分析应用和数据库的性能表现。应用的性能降级通常是因为数据库访问策略、硬件可用性和数据库连接数设置不正确导致的。

一些用户可能因为采用不合适的索引策略,或使用糟糕的表设计模式,而遭遇应用或数据库性能瓶颈。 探讨这些因素如何对MongoDB内部的死锁产生影响。

性能问题可能说明数据库正在按容量临界值执行,是时候为数据库添加额外的服务器资源。通常应用程序的工作集需与服务器可用物理内存相匹配。

某些性能问题可能是暂时的,与不正常负载有关。章节,讨论了一些通过数量缩放释放过度负载的措施。

can help you to understand what operations are causing degradation. 章节或许可以帮助您了解什么类型的操作会造成性能降级。

锁性能

MongoDB使用一套锁机制确保数据集的一致性。如果某个操作执行时间较长或是一个队列表单,下一操作请求由于要等待当前操作释放锁而出现性能降级。

与锁相关的慢查询可能是间歇性的,确定是否由于死锁影响了应用性能,请参考 输出内容中的 部分和 部分。

locks.timeAcquiringMicros除以locks.acquireWaitCount能计算出特定锁模式的平均等待时间。

locks.deadlockCount获取死锁次数。

如果 值持续较高,有可能有大量的请求在等待锁释放。说明可能有影响性能的并发问题。

慢查询可能的原因:索引的无效使用;非最优表设计模式;糟糕的查询结构;系统架构问题;内存不足触发磁盘读取。

连接数

是如下两个字段的容器:

如果有大量的并发应用请求,数据库可能无法满足需求。您可能需要对数据库进行扩容。

连接数峰值也可能是应用程序或驱动程序错误的结果。所有官方MongoDB驱动均实现了连接池,支持客户端更高效的使用和复用连接对象。高连接数却未发现相匹配的负载,可能说明驱动或者其他配置发生错误。

数据库性能

以下分析级别可用:

级别
描述

0

分析器关闭且不收集数据,默认配置0。

1

分析器对执行时间超过 slowms 阈值的操作进行数据收集

2

分析器对所有操作进行数据收集

重要

分析器会影响性能且与系统日志共享配置。生产环境开启或设置分析器前请认证考虑性能和安全性影响。

注意

诠释诊断数据采集

FTDC隐私

FTDC数据文件是的不可读压缩格式。MongoDB公司工程师没有系统所有者或运营者的明确许可和帮助,不能访问FTDC数据。

FTDC数据 从不 包含如下类型信息:

  • 查询、查询谓词或查询结果的示例

  • 从任何最终用户集合或索引中采样的数据

  • 系统或MongoDB用户凭据或安全证书

FTDC定期收集由以下命令生成的统计信息:

依赖于主机操作系统,诊断数据可能包括如下统计:

  • CPU使用率

  • 内存使用率

  • 与性能相关的磁盘利用率。FTDC不包括与存储容量相关的数据。

  • 网络性能统计。FTDC只捕获元数据,不捕获或检查任何网络数据包。

FTDC收集在文件交换或启动时以下命令生成的统计信息

FTDC默认按如下执行:

  • 每秒进行数据采集

  • 最大200MB“diagnostic.data”文件夹大小。

这些默认设置旨在向MongoDB公司工程师提供有用的数据,对性能或存储大小的影响最小。这些值仅在MongoDB公司工程师出于特定诊断目的需求时才需修改。

setParameter:
  diagnosticDataCollectionEnabled: false

关闭FTDC可能增加MongDB公司工程师分析和调试问题的时间和资源。

译者:程哲欣

如果 相对于 较高,说明数据库的死锁已经维持一段时间了。

某些情形下,应用和数据之间的连接数可能超出了服务器能处理的请求数, json文档中的一些属性可以提供一些洞察。

是连接到当前数据库实例的客户端连接总数。

是可以给新客户端使用的剩余连接总数。

对于“读”较频繁的应用,您需要增加 的大小并将读操作路由到 节点

对于“写”较频繁的应用,部署 并添加多个 到 分散 实例之间的负载。

通过设置 配置指定mongoDB支持的最大传入连接数,该值不可超过操作系统最大范围限制。Unix类操作系统中,系统最大范围限制可以通过 ulimit 命令修改,或通过编辑 /etc/sysctl 文件修改。更多详情参见 章节。

收集MongoDB实例上执行操作的详细信息。“分析器”的输出能帮助用户识别无效查询和操作。

您可以给一个 实例的单个或全部数据库开启和配置数据库分析器。分析器的配置仅作用于单个 实例,并不会在 或 上传播。

开启和配置分析器参见 章节。

分析器可能造成的潜在性能降级参见 章节

当设置成0时,MongoDB慢查询将以确定的采样速率发送到诊断日志。从MongoDB 4.2开始,复制集Secondaries节点的 ,并不遵从这一采样速率。更高级别的 配置下,所有操作都将显示在诊断日志中,无论其延迟时间如何,除了:的日志。secondaries节点日志只记录慢的oplog条目;增加 不会记录所有oplog条目。

从MongoDB 4.2开始, 和 读/写操作的包括:

queryHash 帮助判别有相同 的慢查询。

planCacheKey 对慢查询的 提供更多详情。

“mongod”和“mongos”进程包括一个全时诊断数据收集(FTDC)机制,以便于MongoDB公司工程师对MongoDB服务器运行情况进行分析。FTDC数据文件是不可读压缩格式,并且继承与MongoDB数据文件相同的文件访问权限。只有能够访问FTDC数据文件的用户才能传输FTDC数据。工程师不能独立于系统所有者或运营人员访问FTDC数据。MongoDB进程默认运行FTDC。更多MongoDB支持选项请查看 。

FTDC data包含某些主机信息,例如:主机名称,操作系统信息,和用于启动 或 的配置。这些信息可能被某些组织或监管机构视为受保护或机密,但通常不被视为个人身份信息(PII)。对于这些字段配置了受保护、机密或PII数据的集群,请在发送FTDC数据之前通知MongoDB公司工程师,以便采取适当的措施。

(仅mongod)

对 表的 命令。(仅mongod)

(仅mongos)

进程将FTDC数据文件存储在mongoDB实例 下的 diagnostic.data 目录中。所有诊断数据文件被存储在这个路径下。举例: 设置成 /data/db ,诊断数据路径则是 /data/db/diagnostic.data。

进程将FTDC数据文件存储在相对于 日志路径设置的诊断目录中。MongoDB截断日志文件扩展名,并将 diagnostic.data 连接到剩余的名称。举例: 设置/var/log/mongodb/mongos.log,诊断数据路径为/var/log/mongodb/mongos.diagnostic.data。

您能在查看FTDC源代码。ftdc_system_stats_*.ccp 文件具体定义捕获的任何特定于系统的诊断数据。

以 diagnosticDataCollectionEnabled: false 启动 或 ,或者在配置文件 中设置该选项,可关闭FTDC。

原文链接:

锁性能
连接数
数据库性能
全时诊断数据采集
锁性能章节
连接数
Database Profiling
数据库性能
serverStatus
锁
全局锁
globalLock.currentQueue.total
globalLock.totalTime
uptime
serverStatus
connections.current
connections.available
复制集
secondary
分片
分片
分片集
mongod
maxIncomingConnections
UNIX ulimit 设置
数据库分析器
mongod
mongod
复制集
分片集
数据库分析器
分析器开销
logLevel
slowOpSampleRate
所有超过慢查询阈值的oplog条目信息都将输出
logLevel
secondaries节点的慢oplog条目消息的记录
logLevel
profiler entries(分析器实体)
diagnostic log messages (i.e. mongod/mongos log messages)(诊断日志消息,例如:mongod/mongos 日志消息)
query shape
query plan cache 查询计划缓存
Getting Started With MongoDB Support
mongod
mongos
serverStatus
replSetGetStatus
local.oplog.rs
collStats
connPoolStats
getCmdLineOpts
buildInfo
hostInfo
mongod
storage.dbPath
dbPath
mongos
systemLog.path
path
MongoDB Github Repository
mongod
mongos
setParameter
https://docs.mongodb.com/manual/administration/analyzing-mongodb-performance/#mongodb-performance