2013-10-08 145 views
1

我從MongoDB中得到了很奇怪的行爲。MongoDB第一個查詢很慢

我有一個分片會話跟蹤集合是我做findOne只在_id(=分片鍵)上。

在獲取會話數據之前,我還通過findOne(同樣在_id上)獲取站點數據(非分片集合),我將站點數據緩存在memcached中,這樣跟蹤findOne需要大約0.04秒的時間才能獲取。

但是,當我禁用站點數據上的memcached並強制它從mongodb獲取數據時,跟蹤findOne需要0.001秒,而站點findOne現在很慢。

說明情況2 findOne網站第一:http://pastebin.com/qTX0az7H

說明情況1 findOne跟蹤第一:http://pastebin.com/bBSXUEKh

我使用的是PHP 1.4.4驅動和MongoDB版本v2.4.6

+1

這是操作系統在第一次運行時緩存MongoDB的工作集,也可能是第一次運行時的網絡延遲 – Sammaye

+0

您可以嘗試不使用'findOne',而只是'find'?我發現'findOne'實際上比'find'慢... – RickyA

+0

節點之間的網絡延遲avg 0.401ms,所以我不認爲這會是問題,它可能是操作系統緩存工作集,但我將如何測量這個? explain()並不真正向我展示任何東西。 – Vincent

回答

0

顯然這是由於在Mongo類中使用Mongo類代替MongoClient類來連接。