为什么要覆盖system.profile集合中的查询

时间:2013-08-29 12:25:29

标签: mongodb

我正在尝试收集关于我的Applciation发生在mongodb上的所有查询。 所以我将分析级别设置为2,以便它将记录所有查询。 作为架构的一部分,只要用户登录,就会在mongodb上发生连续的更新。

但我观察到system.profile计数正在减少,不知道为什么

> db.system.profile.count()
322
> db.system.profile.count()
351
> db.system.profile.count()
202
> db.system.profile.count()
136
> db.system.profile.count()
233

为什么我的情况下会覆盖查询?

我是否有可能记录我的应用程序发生的所有区别查询。

我需要这个,因为我可以在我的一个集合中删除/添加一些索引。

2 个答案:

答案 0 :(得分:21)

system.profile是一个上限集合,默认大小为1MB,因此文档会以自然(相对于插入时间戳)为基础进行清除,以便为较新的文档腾出空间。

为了增加system.profile集合的大小(比如10 MB),请执行:

1)停止探查器:db.setProfilingLevel(0)

2)删除system.profile:db.system.profile.drop()

3)手动创建一个更大的system.profile集合:db.createCollection( "system.profile", { capped: true, size: 1024 * 1024 * 10 } )

4)再次启用分析

如果平均而言,在200-300个文档附近安装了1MB的集合,则新设置将适合大约2,000-3,000个文档。根据需要增加system.profile大小。

答案 1 :(得分:1)

这是官方文档链接 https://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/#profiler-overhead

您需要更改system.profile Collection

的集合更改大小