如何阅读mongodb日志?

时间:2016-09-23 10:48:41

标签: mongodb indexing sharding latency database

我有一些mongodb问题可以解决慢查询问题。以下显示了我的mongodb日志中的2个条目。我使用mongodb版本2.4.12。在这种情况下,这些查询的响应时间很长。 ( 2354ms 1173ms 相应)。我知道第一个是READ查询,第二个是UPDATE查询。

第一次查询

Mon Sep 01 11:00:01.171 [conn11431867]查询myapp.User查询:{clientId:40000} ntoreturn:0 ntoskip:0 nscanned:278045 keyUpdates:0 numYields:2 locks(micros)r:4187970 nreturned:18 reslen:14091 2354ms

第二次查询

Mon Sep 01 22:10:00.394 [conn11374746]更新myapp.User查询:{_ id:ObjectId(&#39; 5789999e4b06d0f3aeeb947&#39;)}更新:{_ id:ObjectId(&#39; 5789999e4b06d0f3aeeb947& #39;),className:&#34; com.myapp.domain.User&#34;,firstName:&#34; Amila&#34;,lastName:&#34; Iddamalgoda&#34;,userId:10001000,loginId: &#34; amilai&#34;,emailAddress:&#34; test@test.com" ;, clientId:40000} idhack:1 nupdated:1 keyUpdates:0 locks(micros)w:189 1592ms < / p>

有人可以提供以下问题的答案吗?谢谢。欣赏很多。

1。)我也使用分片。对于此用户集合索引设置为&#39; userId &#39;。什么可能是mongo响应时间缓慢的根本原因? ( 2354ms 1173ms

2.。)在第一个查询日志中,查询:{clientId:40000} 是什么意思?是mongo使用clientId键找到用户? nscannedObjects ==&gt;扫描的文件数量。但是&#39; r &#39;并且&#39; nreturned &#39;和&#39; reslen &#39;是什么意思?

3.)我知道mongo正在使用多粒度锁定。但在这种情况下,这个响应时间是写锁定的结果吗?

4。)我需要分解第二个查询(更新查询)中显示的内容。它是从ObjectId读取并更新单个字段还是?什么去那儿?

1 个答案:

答案 0 :(得分:1)

逐一回答你的问题:

  1. 您的查询扫描了278045个文档,找出了18个结果。这可能是根本原因。
  2. 查询:{clientId:40000} 表示您的查询对象正好是{ clientId: 40000 }。此日志的查询语句为db.User.find({ clientId: 40000 })。并且您的索引位于 userId ,此查询需要 clientId 上的索引才能加速。
  3. 在一般情况下,锁定时间比响应时间短。但
  4.   

    对于需要多个锁的操作,例如锁定本地数据库以更新oplog的操作,此值可能长于操作的总长度(即毫秒)。

    1. 不知道。
    2. 总结一下,考虑在 clientId 上创建一个索引。