说到MongoDB的慢日志分析,就不得不提到概要文件分析器,配置文件分析器将记录的慢日志写到system.profile集合下,这个集合是一个固定集合。我们可以通过对这个集合的查询,来了解当前的慢日志,进而对数据库进行优化。
<强>整体环境强>
<强> Part1:输出示范强>
在查询<代码> system.profile> 代码的时候,我们能够观察到所有的操作,包括删除、更新、查找等等都会被记录到<代码> system.profile> 代码集合中,该集合中包含了诸多信息,如:
{ “人事处”:“查询”, “ns”:“test.c”, "查询":{ “找到”:“c”, “过滤器”:{ “一”:1 } }, “keysExamined”: 2 “docsExamined”: 2 “cursorExhausted”:没错, “keyUpdates”: 0, “writeConflicts”: 0, “numYield”: 0, "锁":{ "全球":{ " acquireCount ": { “r”: NumberLong (2) } }, "数据库":{ " acquireCount ": { “r”: NumberLong (1) } }, "收藏":{ " acquireCount ": { “r”: NumberLong (1) } } }, “nreturned”: 2 “responseLength”: 108年, “飞船”:0, " execStats ": { “阶段”:“取”, “nReturned”: 2 “executionTimeMillisEstimate”: 0, “工作”:3, “高级”:2 “needTime”: 0, “needYield”: 0, “saveState”: 0, “restoreState”: 0, “isEOF”: 1、 “无效”:0, “docsExamined”: 2 “alreadyHasObj”: 0, " inputStage ": { “阶段”:“IXSCAN”, “nReturned”: 2 “executionTimeMillisEstimate”: 0, “工作”:3, “高级”:2 “needTime”: 0, “needYield”: 0, “saveState”: 0, “restoreState”: 0, “isEOF”: 1、 “无效”:0, " keyPattern ": { “一”:1 }, :“indexName a_1”, “isMultiKey”:假的, “独特”:假的, “isSparse”:假的, “isPartial”:假的, “indexVersion”: 1、 “方向”:“前进”, " indexBounds ": { “a”:( “[1.0,1.0]” ] }, “keysExamined”: 2 “dupsTested”: 0, “dupsDropped”: 0, “seenInvalidated”: 0 } }, ts: ISODate (“2015 - 09 - 03 - t15:26:14.948z”), “客户”:“127.0.0.1”, “权限”:[], "用户":" "}
<强>第二部分:输出解读强>
<代码> system.profile。op 代码>
这一项主要包含如下几类
-
<李> 李>插入
<李> 李>查询
<李> 李>更新
<李>删除李>
<李> getmore李>
<李>命令李>
代表了该慢日志的种类是什么,是查询,插入,更新,删除还是其他。
<代码> system.profile。ns 代码>
该项表明该慢日志是哪个库下的哪个集合所对应的慢日志。
<代码> system.profile。代码查询>
该项详细输出了慢日志的具体语句和行为
<代码> system.profile。keysExamined 代码>
该项表明为了找出最终结果MongoDB搜索了多少个关键
<代码> system.profile。docsExamined 代码>
该项表明为了找出最终结果MongoDB搜索了多少个文档
<代码> system.profile。keyUpdates 代码>
该项表名有多少个索引键在该操作中被更改,更改索引键也会有少量的性能消耗,因为数据库不单单要删除旧钥匙,还要插入新的关键到b - tree索引中
<代码> system.profile。writeConflicts 代码>
写冲突发生的数量,例如更新一个正在被别的更新操作的文档
<代码> system.profile。numYield 代码>
为了让别的操作完成而屈服的次数,一般发生在需要访问的数据尚未被完全读取到内存中,MongoDB会优先完成在内存中的操作
<代码> system.profile。锁代码>
在操作中产生的锁,锁的种类有多种,如下:
全球 表示全局锁。 MMAPV1Journal 代表MMAPv1存储引擎特定的锁来同步杂志写道;forMMAPV1Journal  non-MMAPv1存储引擎的模式,是空的。 数据库 表示数据库锁。 集合 代表收集锁。 元数据 表示元数据锁。 oplog 代表锁上,oplog。