mongodb性能调试基本技巧

1. 判断哪些是慢查询?

   mongodb通过profile来实时的获取性能较慢的查询,设置profile命令如下


  db.runCommand { profile: 1, slowms: 200 }

表示开启profile,记录大于200毫秒的操作


profile值有以下含义

-1 无变化,返回当前profile值
0 关闭profile, 这是系统默认的profile值
1 开启,只记录慢的操作
2 开启,记录所有操作

或者使用MongoVUE工具



开启后,mongodb会生成system.profile的collection来存储哪些慢的操作

2. 分析慢查询

使用.explain()方法分析查询,例如  db.XXX.find(....).explain()则会生成一个对查询的解释:

   查询结果最主要关注下面几个字段

  • cursor:   BasicCursor 表示用的是非索引的查询, BtreeCursor 表示用的是B树查询,同时会告诉用的是哪个索引
  • nscanned:  总共扫描的文档和索引的数量
  • nscannedObjects: 总共扫描的documents数量
  • n: 满足条件对象的数量
  • millis: 查询花费的时间(微秒)

一般来讲cursor使用B树查询效率高,如果使用了B树查询仍然慢,则需要根据查询条件和数据特点增加不同的索引,例如增加不同字段的组合索引,使得查询能够优先选择更高效的索引,这个是由mongodb自身内部进行选择的。


参考:
https://blog.openshift.com/design-and-performance-tips-for-mongodb-indexes/
https://docs.mongodb.com/manual/reference/command/profile/

posted on 2016-05-27 10:48  omage  阅读(69)  评论(0编辑  收藏  举报