千家信息网

MongoDB Database Profiling

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,MongoDB Database ProfilingMongoDB Profiler是一个捕获数据库执行活动的系统,它可以帮助识别慢查询和操作。Profiling级别可用的捕获级别意义如下:级别 设置
千家信息网最后更新 2026年11月02日MongoDB Database Profiling

MongoDB Database Profiling



MongoDB Profiler是一个捕获数据库执行活动的系统,它可以帮助识别慢查询和操作。

Profiling级别



可用的捕获级别意义如下:


级别 设置

0 禁用

1 启用,只记录慢操作

2 启用,记录所有操作

查看Profiling级别


> db.getProfilingLevel()

启用Profiler


> db.setProfilingLevel(1)

完整命令为:

db.setProfilingLevel(level,slowms)


当level为1的时候,慢操作的默认值为100ms,若指定慢操作为500ms:

> db.setProfilingLevel(1,500)

注意:

在默认情况下,mongod记录所有的慢查询(由showOpThresholdMs定义,默认值为100ms)到MongoDB日志文件中。

只在关键时候启用Profiling,尽量不要在生产环境启用它。

基于独立mongod实例启用Profiling。该设置将不会通过副本集或分片集群扩散到其他实例。

查看Profiler结果



使用的是system.profile 来记录,而system.profile 是一个capped collection。在你的数据库的system.profile集合,调用mongo shell命令show profile,或者查询system.profile集合可以查看Profiler的输出,如:

db.system.profile.find( { millis : { $gt : 1000 } } )

就可以输出,查询时间大于1秒的慢查询。

Profiler信息内容详解



ts-该命令在何时执行.

millis Time-该命令执行耗时,以毫秒记.

info-本命令的详细信息.

query-表明这是一个query查询操作.

ntoreturn-本次查询客户端要求返回的记录数.比如, findOne()命令执行时 ntoreturn 为 1.有limit(n) 条件时ntoreturn为n.


query-具体的查询条件(如x>3).

nscanned-本次查询扫描的记录数.

reslen-返回结果集的大小.

nreturned-本次查询实际返回的结果集.

update-表明这是一个update更新操作.

fastmod-Indicates a fast modify operation. See Updates. These operations are normally quite fast.

fastmodinsert - indicates a fast modify operation that performed an upsert.


upsert-表明update的upsert参数为true.此参数的功能是如果update的记录不存在,则用update的条件insert一条记录.

moved-表明本次update是否移动了硬盘上的数据,如果新记录比原记录短,通常不会移动当前记录,如果新记录比原记录长,那么可能会移动记录到其它位置,这时候会导致相关索引的更新.磁盘操作更多,加上索引更新,会使得这样的操作比较慢.


insert-这是一个insert插入操作.

getmore-这是一个getmore 操作,getmore通常发生在结果集比较大的查询时,第一个query返回了部分结果,后续的结果是通过getmore来获取的。

性能优化

尽管我们没有启用Profiler,但在生产环境中,我们查看日志文件仍可以看到大于100ms的慢操作。

tail -f /data/var/log/mongodb/mongod.log
Mon May 25 02:57:22.670 [conn756] query MyTest.Pro query: { $query: { CutePath: /^122-133-1456(-\d+)*$/, Avail.Status: { $lt: 5 }, $or: [ { _id: { $lt: 3310 } }, { _id: { $gt: 8520, $lt: 8530 } }, { _id: { $gt: 9720, $lt: 9730 } } ] }, $orderby: { Avail.Status: 1, AvgRate: -1 } } ntoreturn:200 ntoskip:0 nscanned:18764 scanAndOrder:1 keyUpdates:0 numYields: 10 locks(micros) r:217999 nreturned:200 reslen:563505 116ms


如果nscanned(扫描的记录数)远大于nreturned(返回结果的记录数)的话,那么我们就要考虑通过加索引来优化记录定位了。


reslen 如果过大,那么说明我们返回的结果集太大了,这时请查看find函数的第二个参数是否只写上了你需要的属性名。


对于创建索引的建议是:如果很少读,那么尽量不要添加索引,因为索引越多,写操作会越慢。如果读量很大,那么创建索引还是比较划算的。

参见:

http://docs.mongodb.org/manual/administration/analyzing-mongodb-performance/#database-profiling

http://docs.mongodb.org/master/MongoDB-crud-guide.pdf


查询 结果 命令 索引 级别 这是 参数 数据 条件 更新 移动 信息 实例 数据库 文件 新记录 日志 时候 环境 生产 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 上海喔噻互联网科技有限公司 以房互联网科技 广西互联网科技公司 左右互联网络科技 多迪互联网科技有限公司 海南购全球互联网科技 广西拼得多互联网科技有限公司 互联网教育科技公司vipkid 昭通云南众福互联网科技有限公司 河南猎农互联网科技有限公司 新兴科技互联网创新大赛颁奖典礼 注册互联网科技公司经营范围大全 广州市恰铎互联网科技有限公司 国大互联网教育科技有限公司薪资 伍佰万互联网科技怎么赚钱 互联网科技资金流入 半导体行业属于互联网高科技类吗 互联网金融运营模式中的金融科技 互联网科技的前景 互联网科技网 华宇互联网科技 中国最先进互联网科技公司 福建科技产业互联网发展 互联网科技公司实习生 搜狐科技互联网 互联网硬科技公司 普陀区互联网教育科技管理办法 华人运通互联网科技公司 科技发展第三阶段互联网时代
0