MongoDB慢查询日志

类似于 MySQL 的 slow log, mongodb 可以监控所有慢的以及不慢的查询。这个工具就是 Profiling,该工具在运行的实例上收集有关 MongoDB 的写操作,游标,数据库命令等,可以在数据库级别开启该工具,也可以在实例级别开启。

该工具会把收集到的所有都写入到 system.profile 集合中,该集合是一个 capped collection。Profiling 功能肯定是会影响效率的,但是不太严重,原因是他使用的是 system.profile 来记录,而 system.profile 是一个 capped collection, 这种 collection 在操作上有一些限制和特点,但是效率更高。

MongoDB慢查询分享Profiling详解

查看级别

# 查看级别 PRIMARY> db.getProfilingLevel()

级别说明:

级别 说明
0 关闭,不收集任何数据。
1 收集慢查询数据,默认是 100 毫秒。
2 收集所有数据。

设置级别

PRIMARY> db.setProfilingLevel(2) { "was" : 1, "slowms" : 100, "ok" : 1 } #这里返回的是上一次的设置 # 设置级别和时间 PRIMARY> db.setProfilingLevel(1,200) { "was" : 2, "slowms" : 100, "ok" : 1 } #这里返回的是上一次的设置 # 关闭Profiling PRIMARY> db.setProfilingLevel(0) { "was" : 1, "slowms" : 200, "ok" : 1 } #这里返回的是上一次的设置

清空system.profile或者修改大小

# 关闭Profiling PRIMARY> db.setProfilingLevel(0) { "was" : 0, "slowms" : 200, "ok" : 1 } # 删除system.profile集合 PRIMARY> db.system.profile.drop() true # 创建一个新的system.profile集合 --- 4M PRIMARY> db.createCollection( "system.profile", { capped: true, size:4000000 } ) { "ok" : 1 } # 重新开启Profiling PRIMARY> db.setProfilingLevel(1,200) { "was" : 0, "slowms" : 200, "ok" : 1 }

如果是复制集环境,要修改副本的 system.profile 的大小,必须把副本先从复制集中剔除,然后执行上述步骤,最后加入复制集。

启动配置

也可以 MongoDB 启动时,开启 Profiling:

mongod --profile=1 --slowms=200

或者在配置文件里添加:

profile = 1 slowms = 200

MongoDB慢查询日志

类似于 MySQL 的 slow log, mongodb 可以监控所有慢的以及不慢的查询。这个工具就是 Profiling,该工具在运行的实例上收集有关 MongoDB 的写操作,游标,数据库命令等,可以在数据库级别开启该工具,也可以在实例级别开启。

该工具会把收集到的所有都写入到 system.profile 集合中,该集合是一个 capped collection。Profiling 功能肯定是会影响效率的,但是不太严重,原因是他使用的是 system.profile 来记录,而 system.profile 是一个 capped collection, 这种 collection 在操作上有一些限制和特点,但是效率更高。