我该如何查看正在执行的mongodb查询?

6

我在日志/development.log中经常看到这个,我想知道这个查询是否实际上被执行在我的数据库中:

MONGODB (0ms) socialcrunch_development['tags'].find({:_id=>"secrets"}).limit(-1).sort([[:_id, :asc]])

我该如何查看正在执行的MongoDB查询,以便我可以计数它们?这些查询通常都是.find命令吗?还是我需要寻找其他内容?

2个回答

13

打印所有活动阅读:

db.currentOp().inprog.forEach(
   function(d){
     if(d.waitingForLock && d.lockType != "read")
        printjson(d)
     })

打印所有活动写入:

db.currentOp().inprog.forEach(
   function(d){
     if(d.waitingForLock && d.lockType != "write")
        printjson(d)
     })

如果你想更加具体,可以使用currentOp.op按特定操作类型(插入、更新、删除等)进行筛选。

请查看MongoDB.org文档中以下页面以获取更多信息: http://docs.mongodb.org/manual/reference/current-op/


1
这个在我的谷歌搜索中排名很高,我正在寻找类似于mysql SET global general_log = 1;SET global log_output = 'table'; 的东西,然后查询我的应用程序所做的查询(甚至可以按查询文本进行过滤)。这对于mysql帮助了我很大的忙,以便查看我的应用程序实际查询了什么,但是我不知道如何在mongodb中做到这一点,而且在谷歌上搜索它会让我进入类似于这个页面的活动查询。 - HMR
3
@HMR当前操作只是指当前正在进行的操作。如果您想从应用程序中收集所有数据库活动以便分析查询性能,可以使用相关但不同的工具。尝试将概要级别设置为“2”,以将所有内容记录到system.profile集合中。更多信息请参见:http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/ - Brandon Black
3
请注意,您不希望一直保持配置文件级别。只有在短时间内运行它,然后禁用它。过度使用配置文件会带来性能成本和额外的写入。 - Brandon Black

0

在引擎盖下,这与我的答案做的事情相同,但如果你更喜欢使用GUI界面,这是一个不错的选择。 - Brandon Black
截至今天,提供的链接已不再可用。 - SuperPoney
提到的链接已经失效 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接