2012-10-16 44 views
2

MongoDb有没有像MySql的SELECT SLEEP(5);模拟mongodb中的慢查询?

我可以看到一些内部睡眠功能,可以暂停整个服务器,但我只需暂停当前查询。

免责声明:只是为了测试目的

+0

你想模拟慢速查询吗? – Gabe

+0

是的,是的... –

+0

我不认为这样的东西存在atm,至少我从来没有听说过它。我想你可以使用'$ where'和一些鬼鬼祟祟的编码来让JS线程休眠,但是只能用于测试。然而,这将导致发现每次文档迭代的睡眠或“超时()”。 – Sammaye

回答

5

您可以使用$where operator来调用sleep()。这应该适用于任何语言或ORM/ODM。例如,在Mongoid你可以这样做:

Model.where(:$where => "sleep(100) || true").count 

调为集合中的文档数量睡眠值(它会在每一个延迟)。这对数据库服务器来说是相当可怕的事情,所以只能用于测试,并且永远不会(在生产服务器上)。

+0

在我的问题我提到_sleep_将暂停整个服务器,而不仅仅是一个单一的查询 –

+0

这不会暂停整个服务器(其他查询仍然会运行在每个文档上的睡眠调用之间),但它确实会让它变慢。 –

0

mongo壳可以做睡眠(MS),运行查询前5秒,如睡眠:

> sleep(5000); db.collection.find(..); 

这不暂停当前查询,但会在继续执行下一条语句(相当于MySQL中的select sleep(5))之前,在该连接上暂停执行特定的毫秒数。

3

您可以使用$where运营商作为code_monkey_steve说,但请确保您使用mongo version >= 2.4。在该版本之前,不能在同一台服务器上并行运行javascript。 sleep命令是javascript,所以它显然会阻止您可能制作的其他javascript查询。