<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[BIWEB开源PHP WMS系统创始人ArthurXF肖飞的blog]]></title> 
<link>http://www.bizeway.net/index.php</link> 
<description><![CDATA[网务通 - 网务公司发展之路]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[BIWEB开源PHP WMS系统创始人ArthurXF肖飞的blog]]></copyright>
<item>
<link>http://www.bizeway.net/read.php?</link>
<title><![CDATA[mongodb 优化器 profile]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[Mongodb]]></category>
<pubDate>Fri, 26 Oct 2012 03:23:55 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?</guid> 
<description>
<![CDATA[ 
	<div>在MySQL 中，慢查询日志是经常作为我们优化数据库的依据，那在MongoDB 中是否有类似</div> <div>的功能呢?答案是肯定的，那就是MongoDB Database Profiler。所以MongoDB 不仅有，而且</div> <div>还有一些比MySQL 的Slow Query Log 更详细的信息。</div> <div><br /></div> <div><span style="font-size: small"><strong>1. 开启 Profiling 功能</strong></span></div> <div><br /></div> <div> <div>有两种方式可以控制 Profiling 的开关和级别，第一种是直接在启动参数里直接进行设置。</div> <div>启动MongoDB 时加上&ndash;profile=级别 即可。</div> <div>也可以在客户端调用db.setProfilingLevel(级别) 命令来实时配置，Profiler 信息保存在</div> <div>system.profile 中。我们可以通过db.getProfilingLevel()命令来获取当前的Profile &nbsp;级别，类似如下操作</div></div> <div><pre class="prettyprint"><p><span class="pun">&gt;</span><span class="pln"> db</span><span class="pun">.</span><span class="pln">setProfilingLevel</span><span class="pun">(</span><span class="lit">2</span><span class="pun">);</span><br /><span class="pun">{</span><span class="pln"> </span><span class="str">&quot;was&quot;</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">&quot;slowms&quot;</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">&quot;ok&quot;</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">}</span></p></pre> <div>上面profile 的级别可以取0，1，2 三个值，他们表示的意义如下：</div> <div> 0 &ndash; 不开启</div> <div> 1 &ndash; 记录慢命令 (默认为&gt;100ms)</div> <div> 2 &ndash; 记录所有命令</div> <div>Profile 记录在级别1 时会记录慢命令，那么这个慢的定义是什么?上面我们说到其默认为</div> <div>100ms，当然有默认就有设置，其设置方法和级别一样有两种，一种是通过添加&ndash;slowms 启</div> <div>动参数配置。第二种是调用db.setProfilingLevel 时加上第二个参数：</div></div> <div><pre class="prettyprint"><p><span class="pln">db</span><span class="pun">.</span><span class="pln">setProfilingLevel</span><span class="pun">(</span><span class="pln"> level </span><span class="pun">,</span><span class="pln"> slowms </span><span class="pun">)</span><br /><span class="pln">db</span><span class="pun">.</span><span class="pln">setProfilingLevel</span><span class="pun">(</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">,</span><span class="pln"> </span><span class="lit">10</span><span class="pln"> </span><span class="pun">);</span></p></pre><br /></div> <div><strong><span style="font-size: small">2. 查询 Profiling 记录</span></strong></div> <div><br /></div> <div> <div>与MySQL 的慢查询日志不同，MongoDB Profile 记录是直接存在系统db 里的，记录位置</div> <div>system.profile ，所以，我们只要查询这个Collection 的记录就可以获取到我们的 Profile 记</div> <div>录了。列出执行时间长于某一限度(5ms)的 Profile 记录：</div> <div>db.system.profile.find( { millis : { $gt : 5 } } )</div></div> <div> <div>查看最新的 Profile 记录：</div> <div>db.system.profile.find().sort({$natural:-1}).limit(1)</div></div> <div><pre class="prettyprint"><p><span class="pun">&gt;</span><span class="pln"> db</span><span class="pun">.</span><span class="pln">system</span><span class="pun">.</span><span class="pln">profile</span><span class="pun">.</span><span class="pln">find</span><span class="pun">().</span><span class="pln">sort</span><span class="pun">({</span><span class="pln">$natural</span><span class="pun">:-</span><span class="lit">1</span><span class="pun">}).</span><span class="pln">limit</span><span class="pun">(</span><span class="lit">1</span><span class="pun">)</span><br /><span class="pun">{</span><span class="pln"> </span><span class="str">&quot;ts&quot;</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="typ">ISODate</span><span class="pun">(</span><span class="str">&quot;2012-05-20T16:50:36.321Z&quot;</span><span class="pun">),</span><span class="pln"> </span><span class="str">&quot;info&quot;</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="str">&quot;query test.system.profile reslen:1219</span><br /><span class="str">nscanned:8 &#92;nquery: { query: {}, orderby: { $natural: -1.0 } } nreturned:8 bytes:1203&quot;</span><span class="pun">,</span><span class="pln"> </span><span class="str">&quot;millis&quot;</span><span class="pln"> </span><span class="pun">:</span><br /><span class="lit">0</span><span class="pln"> </span><span class="pun">}</span><br /><span class="pun">&gt;</span></p></pre> <div>字段说明:</div> <div> ts： 该命令在何时执行</div> <div> info: 本命令的详细信息</div> <div> reslen: 返回结果集的大小</div> <div> nscanned: 本次查询扫描的记录数</div> <div> nreturned: 本次查询实际返回的结果集</div> <div> millis: 该命令执行耗时，以毫秒记</div> <div><br /></div> <div>MongoDB Shell 还提供了一个比较简洁的命令show profile，可列出最近5 条执行时间超过</div> <div>1ms 的 Profile 记录。</div></div><br/>Tags - <a href="tag.php?tag=mango" rel="tag">mango</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?&amp;guid=0#topreply</link>
<title><![CDATA[[评论] mongodb 优化器 profile]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?&amp;guid=0#topreply</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>