2013-08-02 41 views
1

我有相當多的與蒙戈的經驗,但我對挫折的淚水這個問題的邊緣(也當然是從哪兒每天彈出發佈之前)。MongoDB的C#查詢性能比mongotop差很多報道

基本上我查詢數據庫檢索文檔,但它往往是幅度(甚至二)不如它應該是一個數量級,特別是因爲該查詢返回什麼。

查詢:

//searchQuery ex: { "atomic.Basic^SessionId" : "a8297898-7fc9-435c-96be-9c5e60901e40" } 
var doc = FindOne(searchQuery); 

解釋:

{ 
    "cursor":"BtreeCursor atomic.Basic^SessionId", 
    "isMultiKey" : false, 
    " n":0, 
    "nscannedObjects":0, 
    "nscanned":0, 
    "nscannedObjectsAllPlans":0, 
    "nscannedAllPlans":0, 
    "scanAndOrder":false, 
    "indexOnly":false, 
    "nYields":0, 
    "nChunkSkips":0, 
    "millis":0, 
    "indexBounds":{ 
     "atomic.Basic^SessionId":[ 
     [ 
      "a8297898-7fc9-435c-96be-9c5e60901e40", 
      "a8297898-7fc9-435c-96be-9c5e60901e40" 
     ] 
     ] 
    } 
} 

它經常服用50-150毫秒,即使在讀取時間最多爲15毫秒(mongotop報告,這應該是在幾個查詢)。數據庫中只有6k個文檔(索引中只有2k左右,解釋說它使用索引),並且由於搜索的文檔不存在,所以它不能是反序列化問題。

這不是這個壞每個查詢(子毫秒的大部分時間),並肯定是B樹是不是足夠大,有那麼多的變化。

任何想法都會有我永恆的感激之情。

+1

它可能是某種線程問題?我刪除了數據庫,即使沒有條目,它仍然花費很多時間! 集合正在從它未創建的線程調用,但調用新的GetCollection也不輔助。 – mikkelfishman

+0

如果您使用Windows,MongoDB在Windows上通常比其他操作系統慢。根據MongoDB C#驅動程序,它的性能應該與Java等其他託管語言相似(除非查詢使用泛型強烈類型化,否則性能可能會非常不同)。包含lambda表達式的linq查詢也較慢。 –

+0

你在測量線路上的150ms嗎? (你可以嘗試wireshark或者一些網絡嗅探器來查看查詢/響應時間是否從查詢結束到查詢響應在tcp級別被消耗,如果不是那麼它是你的驅動程序或應用程序可能會延遲?)您是否嘗試過在shell中查詢?它是否表現出相同的行爲?您的實驗是否依賴從「冷」應用程序狀態拍攝的單個查詢? (可能與第一次建立mongo服務器,replset連接等有關) –

回答

0

MongoTop未報告總查詢時間。它報告了MongoDB花費特定鎖的時間。

根據解釋0毫秒該查詢重新調諧(這是非常快)。你所描述的聽起來像網絡延遲。 ping節點時的延遲是多少?網絡有沒有可能存在?

你使用的是什麼版本的MongoDB?考慮將MongoDB和C#驅動程序升級到最新的穩定版本。