2015-06-20 94 views
3

我想在MongoDB實例上調試一個高CPU問題。我們有兩個分片r3.large AWS實例。與操作次數相比,頁面錯誤並不多。MongoDB getmore上一個集合很慢

系統配置文件顯示了像下面這樣的getmore條目。請幫助我找出導致getmore很慢的原因。

{ 
     "op" : "getmore", 
     "ns" : "mydb.mycollection", 
     "cursorid" : 74493486271, 
     "ntoreturn" : 0, 
     "keyUpdates" : 0, 
     "numYield" : 7, 
     "lockStats" : { 
      "timeLockedMicros" : { 
       "r" : NumberLong(16140), 
       "w" : NumberLong(0) 
      }, 
      "timeAcquiringMicros" : { 
       "r" : NumberLong(6458801), 
       "w" : NumberLong(294321) 
      } 
     }, 
     "nreturned" : 120, 
     "responseLength" : 13100, 
     "millis" : 6304, 
     "execStats" : { 

     }, 
     "ts" : ISODate("2015-06-16T14:20:39.886Z"), 
     "client" : "1.5.1.3", 
     "allUsers" : [ ], 
     "user" : "" 
    } 
+0

請問你複製延遲樣子? –

+0

@MarkusWMahlberg - 感謝您的回覆。 getmore與聚合查詢緩慢有關。回答我自己的問題如下。 – Samba

回答

3

回答我自己的問題,它可能會幫助其他人。

  • 在CPU高電平時啓用更多日誌記錄db.adminCommand({ setParameter: 1, logLevel: 1 }),重置爲logLevel後:0(默認值)。
  • 然後日誌顯示一個0ms的聚合查詢,但在此之後,獲取更多的輸入5到6秒。
  • 聚合查詢有cursor: { batchSize: 0 },初始批量大小爲零。所以,查詢很快返回。但是,當應用程序開始迭代遊標時,getmore被記錄下來,並且該條目沒有任何查詢細節。

    修復彙總查詢$匹配使用解決的問題指標

+0

你能提供樣本數據和聚合嗎? –

+0

@Samba,你是如何強制查詢使用索引的? – tomascharad

+0

@tomascharad,我們不得不改變組合查詢中元素的順序。 – Samba