MongoDB 的查询优化

在Mysql中,对于查询优化的工作,除了对其平时的使用经验和对其源码的分析之外,有两个工具我们会经常用到,The Slow Query LogOptimizing Queries with EXPLAIN

同样,在MongoDB中也会有类似的工具可供我们使用。官方文档对其有详细的描述,它们分别是Locking PerformanceNumber of ConnectionsDatabase ProfilerExplain Results。其中,Database ProfilerExplain Results这两个工具与上述Mysql中的两个工具类似,并且也是最常用的,本文将主要对这两个工具的使用进行阐述。


Database Profiler

在MongoDB中,Database Profiler会收集数据库的读写操作、游标操作、和数据库命令。可以在数据库级别开启,也可以在实例级别开启(默认情况下,它是关闭的)。开启后,Database Profiler会将收集到的所有数据写入system.profile集合中,这个集合是一个capped collection

Database Profiler有三个级别:
  • 0 – 关闭,不收集任何数据。
    db.setProfilingLevel(0);
  • 1 – 开启,只收集慢查询记录,默认慢查询时间是100ms。
    db.setProfilingLevel(1, 10);
  • 2 – 开启,收集任何数据库操作记录。
    db.setProfilingLevel(2);
Check Profiling Level(查看当前配置):

Mongo Shell 会显示:

was: 开启的级别
slowms:当级别是1时的慢查询毫秒数

View Profiler Data(查看Profiler Data):
  • 查看最近的10个操作记录:
  • 查看除了command operations ($cmd)操作之外的记录:
  • 查看查询耗时大于5ms的操作记录:
Database Profiler Output(慢查询文档说明,learn more from the link Explain Results):

Explain Results

MongoDB提供了两个函数,分别是db.collection.explain() 和 cursor.explain()。


猜你喜欢:

发表评论

电子邮件地址不会被公开。 必填项已用*标注