db.stats()是对MongoDB的阻塞调用吗?

时间:2016-04-11 21:17:41

标签: mongodb wiredtiger

在研究如何检查MongoDB的大小时,我找到了this comment

  

请注意,dbstats会在数据库运行时阻止它,因此它不适合生产。 https://jira.mongodb.org/browse/SERVER-5714

查看链接的错误报告(仍处于打开状态),引用Mongo docs as saying

  

命令需要一些时间才能运行,通常需要几秒钟,除非.ns文件非常大(通过使用--nssize)。运行其他操作时可能会被阻止。

但是,当我检查当前的Mongo文档时,我找不到该文本。相反,they say

  

运行命令所需的时间取决于数据库的总大小。由于该命令必须触及所有数据文件,因此该命令可能需要几秒钟才能运行。

     

对于使用WiredTiger存储引擎的MongoDB实例,在不正常关闭后,大小和计数的统计信息可能会被collStats,dbStats,count报告的最多1000个文档关闭。要恢复集合的正确统计信息,请对集合运行validate。

这是否意味着m a存储引擎通过保持持续统计信息将此更改为非阻止呼叫?

1 个答案:

答案 0 :(得分:0)

游戏晚了一点,但是我在寻找答案时发现了这个问题,答案是:是的,直到3.6.12 / 4.0.5 ,它正在获取“共享”锁( “ R”)在执行期间阻止所有写请求。之后,它现在是一个“意图共享”锁(“ r”),它不会阻止写请求。读取请求不受影响。

来源:https://jira.mongodb.org/browse/SERVER-36437