MongoDB如何查询耗时记录的方法详解

  • A+
所属分类:MongoDB

预备

在此之前,我们先在我们的数据库中插入10万条数据。数据的格局是如许的:

explain

explain办法是用来查看db.collecion.find()的一些查询信息的。例如:

explain办法有个可选的参数verbose,是个字符串,他表现的是verbose的模式。一共分为3种模式:

queryPlanner:默认参数,具体阐明查询优化器选择的方案并列出被回绝的方案。例如:

executionStats:MongoDB运行查询优化器选择得胜的方案,执行方案,完成并返回胜利,统计描写的成功方案的执行。例如:

allPlansExecution:MongoDB返回描写获奖方案的执行以及对其他候选人统计方案选择计划时捕捉的统计。
我们的目标是要记载执行find办法的耗不时间,以是用executionStats模式就可以了。

返回的成果也是只存眷executionStats就可以了,如下图:

nReturned:表现该查询前提下返回的文档数目。
executionTimeMills:表现执行光阴,单元毫秒
totalDocsExamined:表现该聚拢统共文档数。

其他的属性在这里就不多说了,记载耗时我们只取executionTimeMills.

Profiling

上面提到的办法宛如是只实用find办法,对付一些聚合查询之类的查询办法就无法统计耗不时间了。这里再先容一个profiling办法记载查询耗不时间。

开启 Profiling 功效

有两种方式可以节制 Profiling 的开关和级别,第一种是直接在启动参数里直接进行设置。

启动MongoDB时加上–profile=级别 即可。
也可以在客户端挪用db.setProfilingLevel(级别)敕令来及时设置装备摆设。可以经由过程db.getProfilingLevel()敕令来获取当前的Profile级别。

例如:

Profiling一共分为3个级别:

0 - 不开启。
1 - 记载慢敕令 (默以为>100ms)
3 - 记载所有敕令

Profile 记载在级别1时会记载慢敕令,那么这个慢的界说是什么?上面我们说到其默以为100ms,当然有默认就有设置,其设置办法和级别一样有两种,一种是经由过程添 加–slowms启动参数设置装备摆设。第二种是挪用db.setProfilingLevel时加上第二个参数:

查询 Profiling 记载

开启profiling功效后,体系会把相关敕令具体信息记载到当前数据库的system.profile聚拢里。查询办法也是跟通俗的聚拢查询一样。

此中,mills便是敕令耗时记载。

因为我们设置的级别是2,以是所有敕令都有记载,如今我们把他改为级别1,且只记载耗时20毫秒以上的记载:

然后我们再执行一下聚合查询,查看下耗不时间:

可以看出,我们的这聚合查询耗时70毫秒。

profile 部门字段解释

op:操作类型
ns:被查的聚拢
commond:敕令的内容
docsExamined:扫描文档数
nreturned:返回记载数
millis:耗不时间,单元毫秒
ts:敕令执行光阴
responseLength:返回内容长度

下面先容几个常用的查询敕令:

列出执行光阴擅长某一限度(例如:20ms)的 Profile 记载.

查看最新的 3条Profile 记载:

查看关于某个collection的相关慢查询操作:

MongoDB 查询优化

  docsExamined(扫描的记载数)弘远于nreturned(返回成果的记载数)的话,那么我们就要斟酌经由过程加索引来优化记载定位了。

  responseLength 假如过年夜,那么阐明我们返回的成果集太年夜了,这时请查看find函数的第二个参数是否只写上了你必要的属性名。(相似 于MySQL中不要老是select)

  对付创立索引的建议是:假如很少读,那么只管即便不要添加索引,由于索引越多,写操作会越慢。假如读量很年夜,那么创立索引照样比拟划算的。

Profiler 的效力

  Profiling 功效确定是会影响效力的,然则不太严重,缘故原由是他使用的是system.profile 来记载,而system.profile 是一个capped collection 这种collection 在操作上有一些限定和特色,然则效力更高。

总结

以上便是这篇文章的全体内容了,愿望本文的内容对年夜家的进修或者事情具有必定的参考进修代价,假如有疑问年夜家可以留言交流,谢谢年夜家对剧本之家的支撑。

您可能感兴致的文章:

关于Mongodb 认证鉴权你必要知道的一些事linux体系下MongoDB单节点安装教程vue+socket.io+express+mongodb 实现简略单纯多房间在线群聊示例node.js操作MongoDB的实例详解windows7下使用MongoDB实现仓储设计java操作mongoDB查询的实例详解MongoDB 3.4 安装以 Windows 服务方式运行的具体步调详解MongoDB数据库根基操作及实例MongoDB TTL索引的实例详解

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: