退出评论区 發表於 2020-11-10 18:47:00

mongodb的慢查询

<p>&nbsp;####################################</p>
<h3>&nbsp;首先,慢查询日志是针对数据库级别的,咱们设置的时候,要先use 数据库,再开启,一定先确定某个数据库再db.setProfilingLevel(2,500)&nbsp;</h3>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre># 获取超过0.5秒的慢查询:<br>db.system.profile.find({millis:{$gt:<span style="color: rgba(128, 0, 0, 1); font-weight: bold">500</span>}}) <br><br></pre>
<pre># 获取最新的慢查询:<br>db.system.profile.find().sort({$natural:-1})</pre>
<pre><br><br></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>一、获取慢查询配置:</h3>
<div class="cnblogs_code">
<pre><br>性能分析器Profiling级别参数:</pre>
<ul>
<li>0值:关闭性能分析器,不收集任何数据。mongod总是将时间长于slowOpThresholdMs阀值的操作写入到日志。这是默认的性能分析器级别。</li>
<li>1值:只收集慢操作性能分析数据.默认慢操作是那些操作时间大于100毫米的操作。</li>
<li>2值:收集所有数据库操作的性能分析数据。</li>
</ul>
<pre><span style="color: rgba(0, 0, 0, 1)">##############################################################<br>db.getProfilingStatus()

db.setProfilingLevel(1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">500</span>)<br><br>db.setProfilingLevel(1,1000)&nbsp; # 相当于1s<br><br>db.setProfilingLevel(0)#关闭慢查询<br><br>db.system.profile.drop()# 删除慢查询集合<br><br>db.createCollection( "system.profile", { capped: true, size:10000000 } )# 重建慢查询集合</pre>
<pre><span>db.setProfilingLevel(2,500)   #开启慢查询和配置慢查询阈值</span></pre>
</div>
<p>&nbsp;</p>
<p>具体例子如下:</p>
<div class="cnblogs_code">
<pre>glc<span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)"> db.getProfilingStatus()
{
      "was" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">,
      "slowms" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">500</span><span style="color: rgba(0, 0, 0, 1)">,
      "ratelimit" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "sampleRate" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "operationTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1606295083</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">),
      "$clusterTime" : {
                "clusterTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1606295083</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">),
                "signature" : {
                        "hash" : BinData(</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span>,"21NKX80GE0q<span style="color: rgba(128, 128, 128, 1)">/</span>yEV5AJII6XAwctQ<span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)">"),
                        "keyId" : NumberLong("</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">6856584343653974019</span><span style="color: rgba(0, 0, 0, 1)">")
                }
      }
}
glc</span><span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)"> db.getProfilingLevel()
</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">
glc</span><span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span> db.setProfilingLevel(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">500</span><span style="color: rgba(0, 0, 0, 1)">)
{
      "was" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">,
      "slowms" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">500</span><span style="color: rgba(0, 0, 0, 1)">,
      "ratelimit" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "sampleRate" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "ok" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "operationTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1606295103</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">),
      "$clusterTime" : {
                "clusterTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1606295103</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">),
                "signature" : {
                        "hash" : BinData(</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span>,"9m9XwRHgd18Ik2AouRUIvh2DFLg<span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)">"),
                        "keyId" : NumberLong("</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">6856584343653974019</span><span style="color: rgba(0, 0, 0, 1)">")
                }
      }
}
glc</span><span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span> </pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>二、删除慢查询集合:</h3>
<div class="cnblogs_code">
<pre>db.setProfilingLevel(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">)

db.system.profile.</span><span style="color: rgba(0, 0, 255, 1)">drop</span>()</pre>
</div>
<p>&nbsp;</p>
<p>具体例子如下:</p>
<div class="cnblogs_code">
<pre>glc<span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)"> db.getProfilingStatus()
{
      "was" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "slowms" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">500</span><span style="color: rgba(0, 0, 0, 1)">,
      "ratelimit" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "sampleRate" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "operationTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1606294533</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">),
      "$clusterTime" : {
                "clusterTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1606294533</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">),
                "signature" : {
                        "hash" : BinData(</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span>,"UDIIGdRByffSd7zBXbKOocNHVf4<span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)">"),
                        "keyId" : NumberLong("</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">6856584343653974019</span><span style="color: rgba(0, 0, 0, 1)">")
                }
      }
}
glc</span><span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span> db.system.profile.<span style="color: rgba(0, 0, 255, 1)">drop</span><span style="color: rgba(0, 0, 0, 1)">()
</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">2020</span><span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">11</span><span style="color: rgba(128, 128, 128, 1)">-</span>25T16:<span style="color: rgba(128, 0, 0, 1); font-weight: bold">55</span>:<span style="color: rgba(128, 0, 0, 1); font-weight: bold">53.233</span><span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0800</span> E QUERY    <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">js</span><span style="color: rgba(255, 0, 0, 1)">]</span> Error: <span style="color: rgba(0, 0, 255, 1)">drop</span><span style="color: rgba(0, 0, 0, 1)"> failed: {
      "operationTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1606294543</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">),
      "ok" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">,
      "errmsg" : "turn </span><span style="color: rgba(0, 0, 255, 1)">off</span><span style="color: rgba(0, 0, 0, 1)"> profiling before dropping system.profile collection",
      "code" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">20</span><span style="color: rgba(0, 0, 0, 1)">,
      "codeName" : "IllegalOperation",
      "$clusterTime" : {
                "clusterTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1606294543</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">),
                "signature" : {
                        "hash" : BinData(</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span>,"IS5isA2D6B9TAnEsaW<span style="color: rgba(128, 128, 128, 1)">/</span>SFsfwe<span style="color: rgba(128, 128, 128, 1)">+</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)">"),
                        "keyId" : NumberLong("</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">6856584343653974019</span><span style="color: rgba(0, 0, 0, 1)">")
                }
      }
} :
_getErrorWithCode</span><span style="color: rgba(0, 128, 0, 1)">@src</span><span style="color: rgba(128, 128, 128, 1)">/</span>mongo<span style="color: rgba(128, 128, 128, 1)">/</span>shell<span style="color: rgba(128, 128, 128, 1)">/</span>utils.js:<span style="color: rgba(128, 0, 0, 1); font-weight: bold">25</span>:<span style="color: rgba(128, 0, 0, 1); font-weight: bold">13</span><span style="color: rgba(0, 0, 0, 1)">
DBCollection.prototype.</span><span style="color: rgba(0, 0, 255, 1)">drop</span><span style="color: rgba(0, 128, 0, 1)">@src</span><span style="color: rgba(128, 128, 128, 1)">/</span>mongo<span style="color: rgba(128, 128, 128, 1)">/</span>shell<span style="color: rgba(128, 128, 128, 1)">/</span>collection.js:<span style="color: rgba(128, 0, 0, 1); font-weight: bold">707</span>:<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">
@(shell):</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>:<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1<br><br><br></span><span style="color: rgba(0, 0, 0, 1)">
glc</span><span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span> db.setProfilingLevel(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">)
{
      "was" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "slowms" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">500</span><span style="color: rgba(0, 0, 0, 1)">,
      "ratelimit" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "sampleRate" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "ok" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "operationTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1606294563</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">),
      "$clusterTime" : {
                "clusterTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1606294563</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">),
                "signature" : {
                        "hash" : BinData(</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span>,"NT7TdpDLfjzC37lDMtINsmJvVQ0<span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)">"),
                        "keyId" : NumberLong("</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">6856584343653974019</span><span style="color: rgba(0, 0, 0, 1)">")
                }
      }
}
glc</span><span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span> db.system.profile.<span style="color: rgba(0, 0, 255, 1)">drop</span><span style="color: rgba(0, 0, 0, 1)">()
true
glc</span><span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span> </pre>
</div>
<p>&nbsp;</p>
<h3>&nbsp;三、创建慢查询集合:</h3>
<div class="cnblogs_code">
<pre>db.createCollection("system.profile", {size: <span style="color: rgba(128, 0, 0, 1); font-weight: bold">40000000</span>, capped: true})</pre>
</div>
<p>&nbsp;</p>
<p>具体例子如下:</p>
<div class="cnblogs_code">
<pre>glc<span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)"> show tables;
glc</span><span style="color: rgba(0, 0, 0, 1)">
glc</span><span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span> db.createCollection("system.profile", {size: <span style="color: rgba(128, 0, 0, 1); font-weight: bold">40000000</span><span style="color: rgba(0, 0, 0, 1)">, capped: true})
{
      "ok" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "operationTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1606294983</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">),
      "$clusterTime" : {
                "clusterTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1606294983</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">),
                "signature" : {
                        "hash" : BinData(</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span>,"vXiMidZUy7pXCg2t8Zvj4zgsO4E<span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)">"),
                        "keyId" : NumberLong("</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">6856584343653974019</span><span style="color: rgba(0, 0, 0, 1)">")
                }
      }
}
glc</span><span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)"> show tables;
glc
system.profile</span><span style="color: rgba(0, 0, 0, 1)">
glc</span><span style="color: rgba(128, 128, 128, 1)">-</span>test:<span style="color: rgba(0, 0, 255, 1)">PRIMARY</span><span style="color: rgba(128, 128, 128, 1)">&gt;</span> </pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>&nbsp;解读&nbsp;db.system.profile.find().pretty():</h3>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">&nbsp;</span></pre>
<pre><span># "op" : "query",表示操作的类型,代表了该慢日志的种类是什么,是查询、插入、更新、删除还是其他。主要有:</span></pre>
<ol>
<li>insert</li>
<li>query</li>
<li>update</li>
<li>remove</li>
<li>getmore</li>
<li>command</li>
</ol>
<pre><span># "ns" : "igoodful.log<span>" :表示该慢日志是哪个库下的哪个集合所对应的慢日志。</span></span></pre>
<pre><span style="color: rgba(0, 0, 0, 1)"># system.profile.nreturned&nbsp; :该操作最终返回文档的数量;</span></pre>
<p>&nbsp;# system.profile.responseLength :结果返回的大小,单位为bytes,该值如果过大,则需考虑limit()等方式减少输出结果;</p>
<p># system.profile.millis :该操作从开始到结束耗时多少,单位为毫秒;</p>
<p><span># system.profile.execStats :包含了一些该操作的统计信息,只有query类型的才会显示此项,包含查询操作的执行统计信息的文档。对于其他操作,该值为空文档。</span></p>
<p><span># </span>system.profile.execStats.stage :查询类型</p>
<pre></pre>
<ol>
<li><code class="docutils literal">COLLSCAN</code><span>&nbsp;用于收集扫描</span></li>
<li><code class="docutils literal">IXSCAN</code><span>&nbsp;用于扫描索引键</span></li>
<li><code class="docutils literal">FETCH</code><span>&nbsp;用于检索文件</span></li>
</ol>
<pre></pre>
<p># system.profile.ts :该操作执行时的时间</p>
<p># system.profile.locks: 全局、库、表的锁使用情况</p>
<p><span># system.profile.PlanSummary:索引使用情况,有:</span></p>
<p>&nbsp;</p>
<ol>
<li>collscan —— 全表扫描</li>
<li>ixscan —— 索引扫描</li>
<li>idhack —— 使用了默认的_id索引</li>
<li>fetch —— 根据索引去检索某一个文档</li>
<li>shard_metge —— 将各个分片的返回数据进行聚合</li>
<li>sharding_filter —— 通过mongos对分片数据进行查询</li>
</ol>
<p>&nbsp;</p>
<p><span># system.profile.numYield:让出锁</span></p>
<p><span># system.profile.client :哪个客户端发起的该操作,并显示出该客户端的ip或hostname</span></p>
<p><span># system.profile.client :</span></p>
<p><span># system.profile.client :</span></p>
<p><span># system.profile.client :</span></p>
<p><span># system.profile.client :</span></p>
<p>&nbsp;</p>
<pre><em id="__mceDel"><span style="color: rgba(0, 0, 0, 1)"><br><br><br></span></em><span style="color: rgba(0, 0, 0, 1)">{
      "op" : "query",
      "ns" : "igoodful.</span><span style="color: rgba(255, 0, 255, 1)">log</span><span style="color: rgba(0, 0, 0, 1)">",
      "command" : {
                "find" : "</span><span style="color: rgba(255, 0, 255, 1)">log</span><span style="color: rgba(0, 0, 0, 1)">",
                "filter" : {

                },
                "sort" : {
                        "t" : </span><span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">
                },
                "limit" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
                "lsid" : {
                        "id" : UUID("832477ad</span><span style="color: rgba(128, 128, 128, 1)">-</span>a7e6<span style="color: rgba(128, 128, 128, 1)">-</span>4bfc<span style="color: rgba(128, 128, 128, 1)">-</span>9f2b<span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(0, 0, 0, 1)">4b04538d77f3")
                },
                "$clusterTime" : {
                        "clusterTime" : </span><span style="color: rgba(0, 0, 255, 1)">Timestamp</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">1611211743</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">4</span><span style="color: rgba(0, 0, 0, 1)">),
                        "signature" : {
                              "hash" : BinData(</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span>,"bWjbtJwf0mD9oImjMxc1JTIElOk<span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)">"),
                              "keyId" : NumberLong("</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">6908999957030633474</span><span style="color: rgba(0, 0, 0, 1)">")
                        }
                },
                "$db" : "igoodful",
                "$readPreference" : {
                        "mode" : "</span><span style="color: rgba(0, 0, 255, 1)">primary</span><span style="color: rgba(0, 0, 0, 1)">"
                }
      },
      "keysExamined" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">,
      "docsExamined" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">173829</span><span style="color: rgba(0, 0, 0, 1)">,
      "hasSortStage" : true,
      "cursorExhausted" : true,
      "numYield" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1358</span><span style="color: rgba(0, 0, 0, 1)">,
      "nreturned" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "locks" : {
                "Global" : {
                        "acquireCount" : {
                              "r" : NumberLong(</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1361</span><span style="color: rgba(0, 0, 0, 1)">)
                        }
                },
                "</span><span style="color: rgba(0, 0, 255, 1)">Database</span><span style="color: rgba(0, 0, 0, 1)">" : {
                        "acquireCount" : {
                              "r" : NumberLong(</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1359</span><span style="color: rgba(0, 0, 0, 1)">)
                        }
                },
                "Collection" : {
                        "acquireCount" : {
                              "r" : NumberLong(</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1359</span><span style="color: rgba(0, 0, 0, 1)">)
                        }
                }
      },
      "storage" : {

      },
      "responseLength" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1005</span><span style="color: rgba(0, 0, 0, 1)">,
      "protocol" : "op_msg",
      "millis" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">669</span><span style="color: rgba(0, 0, 0, 1)">,
      "rateLimit" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
      "planSummary" : "COLLSCAN",
      "execStats" : {
                "stage" : "SORT",
                "nReturned" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
                "executionTimeMillisEstimate" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">77</span><span style="color: rgba(0, 0, 0, 1)">,
                "works" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">173834</span><span style="color: rgba(0, 0, 0, 1)">,
                "advanced" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
                "needTime" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">173832</span><span style="color: rgba(0, 0, 0, 1)">,
                "needYield" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">,
                "saveState" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1358</span><span style="color: rgba(0, 0, 0, 1)">,
                "restoreState" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1358</span><span style="color: rgba(0, 0, 0, 1)">,
                "isEOF" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
                "invalidates" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">,
                "sortPattern" : {
                        "t" : </span><span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">
                },
                "memUsage" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">782</span><span style="color: rgba(0, 0, 0, 1)">,
                "memLimit" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">33554432</span><span style="color: rgba(0, 0, 0, 1)">,
                "limitAmount" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
                "inputStage" : {
                        "stage" : "SORT_KEY_GENERATOR",
                        "nReturned" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">173829</span><span style="color: rgba(0, 0, 0, 1)">,
                        "executionTimeMillisEstimate" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">35</span><span style="color: rgba(0, 0, 0, 1)">,
                        "works" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">173832</span><span style="color: rgba(0, 0, 0, 1)">,
                        "advanced" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">173829</span><span style="color: rgba(0, 0, 0, 1)">,
                        "needTime" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span><span style="color: rgba(0, 0, 0, 1)">,
                        "needYield" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">,
                        "saveState" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1358</span><span style="color: rgba(0, 0, 0, 1)">,
                        "restoreState" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1358</span><span style="color: rgba(0, 0, 0, 1)">,
                        "isEOF" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
                        "invalidates" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">,
                        "inputStage" : {
                              "stage" : "COLLSCAN",
                              "nReturned" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">173829</span><span style="color: rgba(0, 0, 0, 1)">,
                              "executionTimeMillisEstimate" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">15</span><span style="color: rgba(0, 0, 0, 1)">,
                              "works" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">173831</span><span style="color: rgba(0, 0, 0, 1)">,
                              "advanced" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">173829</span><span style="color: rgba(0, 0, 0, 1)">,
                              "needTime" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
                              "needYield" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">,
                              "saveState" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1358</span><span style="color: rgba(0, 0, 0, 1)">,
                              "restoreState" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1358</span><span style="color: rgba(0, 0, 0, 1)">,
                              "isEOF" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span><span style="color: rgba(0, 0, 0, 1)">,
                              "invalidates" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span><span style="color: rgba(0, 0, 0, 1)">,
                              "direction" : "forward",
                              "docsExamined" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">173829</span><span style="color: rgba(0, 0, 0, 1)">
                        }
                }
      },
      "ts" : ISODate("</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">2021</span><span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">01</span><span style="color: rgba(128, 128, 128, 1)">-</span>21T06:<span style="color: rgba(128, 0, 0, 1); font-weight: bold">49</span>:<span style="color: rgba(128, 0, 0, 1); font-weight: bold">04</span><span style="color: rgba(0, 0, 0, 1)">.415Z"),
      "client" : "</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">10.10</span>.10<span style="color: rgba(128, 0, 0, 1); font-weight: bold">.11</span><span style="color: rgba(0, 0, 0, 1)">",
      "allUsers" : </span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">
                {
                        "user" : "igoodful_wr",
                        "db" : "admin"
                }
      </span><span style="color: rgba(255, 0, 0, 1)">]</span><span style="color: rgba(0, 0, 0, 1)">,
      "</span><span style="color: rgba(255, 0, 255, 1)">user</span>" : "igoodful_wr<span style="color: rgba(0, 128, 0, 1)">@admin</span><span style="color: rgba(0, 0, 0, 1)">"
}</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
    "</span><span style="color: rgba(0, 0, 255, 1)">timestamp</span>": "Thu Apr<span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span> <span style="color: rgba(128, 0, 0, 1); font-weight: bold">07</span>:<span style="color: rgba(128, 0, 0, 1); font-weight: bold">51</span>:<span style="color: rgba(128, 0, 0, 1); font-weight: bold">50.985</span>"<span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"> 日期和时间, ISO8601格式
    "severityLevel": "I"</span><span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"> 日志级别 I代表info的意思,其他的还有F,E,W,D等
    "components": "COMMAND"</span><span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)">组件类别,不同组件打印出的日志带不同的标签,便于日志分类
    "namespace": "animal.MongoUser_58"</span><span style="color: rgba(128, 128, 128, 1)">//</span>查询的命名空间,即<span style="color: rgba(128, 128, 128, 1)">&lt;</span>databse.collection<span style="color: rgba(128, 128, 128, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
    "operation": "find" </span><span style="color: rgba(128, 128, 128, 1)">//</span>操作类别,可能是<span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">find,insert,update,remove,getmore,command</span><span style="color: rgba(255, 0, 0, 1)">]</span><span style="color: rgba(0, 0, 0, 1)">
    "command": { find: "MongoUser_58", filter: { $</span><span style="color: rgba(128, 128, 128, 1)">and</span>: <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)"> { lld: { $gte: 18351 } }, { fc: { $lt: 120 } }, { _id: { $nin: </span> } }, <br>{ $<span style="color: rgba(128, 128, 128, 1)">or</span>: <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)"> { rc: { $exists: false } }, { rc: { $lte: 1835400100 } } </span><span style="color: rgba(255, 0, 0, 1)">]</span> }, { lv: { $gte: <span style="color: rgba(128, 0, 0, 1); font-weight: bold">69</span> } }, { lv: { $lte: <span style="color: rgba(128, 0, 0, 1); font-weight: bold">99</span> } }, <br>{ cc: { $<span style="color: rgba(128, 128, 128, 1)">in</span>: <span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)"> 440512, 440513, 440514, 440500, 440515, 440511, 440523, 440507 </span><span style="color: rgba(255, 0, 0, 1)">]</span> } } ] }, limit: <span style="color: rgba(128, 0, 0, 1); font-weight: bold">30</span> } <span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)">具体的操作命令细节
    "planSummary": "IXSCAN { lv: </span><span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span> }", <span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"> 命令执行计划的简要说明,当前使用了 lv 这个字段的索引。如果是全表扫描,则是COLLSCAN
    "keysExamined": </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">20856</span>, <span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"> 该项表明为了找出最终结果MongoDB搜索了索引中的多少个key
    "docsExamined": </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">20856</span>, <span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"> 该项表明为了找出最终结果MongoDB搜索了多少个文档
    "cursorExhausted": </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">1</span>, <span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"> 该项表明本次查询中游标耗尽的次数
    "keyUpdates":</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span>,<span style="color: rgba(128, 128, 128, 1)">//</span> 该项表名有多少个index key在该操作中被更改,更改索引键也会有少量的性能消耗,因为数据库不单单要删除旧Key,还要插入新的Key到B<span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(0, 0, 0, 1)">Tree索引中
    "writeConflicts":</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span>, <span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"> 写冲突发生的数量,例如update一个正在被别的update操作的文档
    "numYields":</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">6801</span>, <span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"> 为了让别的操作完成而屈服的次数,一般发生在需要访问的数据尚未被完全读取到内存中,MongoDB会优先完成在内存中的操作
    "nreturned":</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">0</span>, <span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"> 该操作最终返回文档的数量
    "reslen":</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">110</span>, <span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"> 结果返回的大小,单位为bytes,该值如果过大,则需考虑limit()等方式减少输出结果
    "locks": { </span><span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"> 在操作中产生的锁,锁的种类有多种,如下
      Global: { acquireCount: { r: </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">13604</span> } },   <span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)">具体每一种锁请求锁的次数
      </span><span style="color: rgba(0, 0, 255, 1)">Database</span>: { acquireCount: { r: <span style="color: rgba(128, 0, 0, 1); font-weight: bold">6802</span><span style="color: rgba(0, 0, 0, 1)"> } },
      Collection: { acquireCount: { r: </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">6802</span><span style="color: rgba(0, 0, 0, 1)"> } }
    },
    "protocol": "op_command", </span><span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)">消息的协议
    "millis" : </span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">69132</span>, <span style="color: rgba(128, 128, 128, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"> 从 MongoDB 操作开始到结束耗费的时间,单位为ms
}</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>&nbsp;解读db.currentOp():</h3>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>#################################################</p>

</div>
<div id="MySignature" role="contentinfo">
    igoodful@qq.com<br><br>
来源:https://www.cnblogs.com/igoodful/p/13955370.html
頁: [1]
查看完整版本: mongodb的慢查询