2013-07-31 17 views
3

Mongoid沒有超時選項。
http://mongoid.org/en/mongoid/docs/installation.html我可以設置Mongoid查詢超時嗎? Mongoid不會殺死長時間查詢

我希望Mongoid殺死長時間的查詢。 如何設置Mongoid查詢超時?

如果我什麼都不做,Mongoid會等很長時間,如下所示。

mongo > db.currentOp() 

{ 
    "opid" : 34973, 
    "active" : true, 
    "secs_running" : 1317, // <- too long! 
    "op" : "query", 
    "ns" : "db_name.collection_name", 
    "query" : { 
    "$msg" : "query not recording (too large)" 
    }, 
    "client" : "123.456.789.123:46529", 
    "desc" : "conn42", 
    "threadId" : "0x7ff5fb95c700", 
    "connectionId" : 42, 
    "locks" : { 
    "^db_name" : "R" 
    }, 
    "waitingForLock" : true, 
    "numYields" : 431282, 
    "lockStats" : { 
    "timeLockedMicros" : { 
    "r" : NumberLong(514304267), 
    "w" : NumberLong(0) 
    }, 
    "timeAcquiringMicros" : { 
    "r" : NumberLong(1315865170), 
    "w" : NumberLong(0) 
    } 
    } 
} 

回答

1

實際上,所有的查詢在默認情況下都有一個超時。您可以設置no_timeout選項來告訴從不timeout.Take看看here

您可以使用初始配置的超時時間查詢,這樣

Mongoid.configure do |config| 
    config.master = Mongo::Connection.new(
    "localhost", 27017, :op_timeout => 3, :connect_timeout => 3 
).db("mongoid_database") 
end 
+1

我想在config/mongoid.yml中設置op_timeout和connect_timeout。我已經這樣做了。但我無法確認參數是否有效。我在哪裏可以確認參數是否有效? CollectionName.all.options是空的散列。 –

+0

@TerukiShinohara它確實有效,它們是有效的 - https://groups.google.com/forum/#!topic/mongoid/UhRfszA_bd4 – Dmitry

1

默認查詢超時是一般是60秒Mongoid,但是由於Rubys線程的存在,在正確關閉進程時往往會出現問題。

希望關你的請求將會把上的Mongrels菌株,但如果你一直運行到這個問題,我會考慮一些優化更改您的應用程序或可能考慮採用神或monit的。如果你不是成和想改變你的要求交出我可能會建議獨角獸,如果你已經在nginx的(github上取得了這一過渡,你可以閱讀更多關於它的here