﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-&lt;b style="font-size:28px"&gt;Derek.&lt;font style='color:red'&gt;Guo&lt;/font&gt; BLOG&lt;/b&gt;</title><link>http://www.blogjava.net/envoydada/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 16:59:02 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 16:59:02 GMT</pubDate><ttl>60</ttl><item><title>扩容kvm虚拟机镜像磁盘空间</title><link>http://www.blogjava.net/envoydada/archive/2013/12/18/407732.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Wed, 18 Dec 2013 04:22:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2013/12/18/407732.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/407732.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2013/12/18/407732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/407732.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/407732.html</trackback:ping><description><![CDATA[<div>1. Shutdown the instance<br /><br />
<div>2. Get current image information<br />
<span style="background-color: #99ccff; font-size: 13px;">#&nbsp;virt</span><span style="background-color: #99ccff; font-size: 13px;">-</span><span style="background-color: #99ccff; font-size: 13px;">filesystems&nbsp;</span><span style="background-color: #99ccff; font-size: 13px;">--</span><span style="font-size: 13px; color: #0000ff; background-color: #99ccff;">long</span><span style="background-color: #eeeeee; font-size: 13px;">&nbsp;</span><span style="background-color: #99ccff; font-size: 13px;">--</span><span style="background-color: #99ccff; font-size: 13px;">parts&nbsp;</span><span style="background-color: #99ccff; font-size: 13px;">--</span><span style="background-color: #99ccff; font-size: 13px;">blkdevs&nbsp;</span><span style="background-color: #99ccff; font-size: 13px;">-</span><span style="background-color: #99ccff; font-size: 13px;">h&nbsp;</span><span style="background-color: #99ccff; font-size: 13px;">-</span><span style="background-color: #99ccff; font-size: 13px;">a&nbsp;windows2003.img</span><span style="background-color: #eeeeee; font-size: 13px;"><br />
</span>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MBR&nbsp;&nbsp;Size&nbsp;&nbsp;Parent<br />
/dev/sda1&nbsp;&nbsp;partition&nbsp;&nbsp;07&nbsp;&nbsp;&nbsp;4.0G&nbsp;&nbsp;/dev/sda<br />
/dev/sda2&nbsp;&nbsp;partition&nbsp;&nbsp;0f&nbsp;&nbsp;&nbsp;1.0K&nbsp;&nbsp;/dev/sda<br />
/dev/sda5&nbsp;&nbsp;partition&nbsp;&nbsp;07&nbsp;&nbsp;&nbsp;6.0G&nbsp;&nbsp;/dev/sda<br />
/dev/sda&nbsp;&nbsp;&nbsp;device&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;10G&nbsp;&nbsp;&nbsp;-</div>
</div><br /><div>3. virt-rezise<br /><div><span style="background-color: #99ccff;"># qemu-img create -f raw new.img 25G<br /></span><div><span style="background-color: #99ccff;"># virt-resize --expand /dev/sda1 old.img new.img</span></div></div></div></div><img src ="http://www.blogjava.net/envoydada/aggbug/407732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2013-12-18 12:22 <a href="http://www.blogjava.net/envoydada/archive/2013/12/18/407732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分布式文件系统Glusterfs</title><link>http://www.blogjava.net/envoydada/archive/2013/08/09/402633.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Fri, 09 Aug 2013 08:00:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2013/08/09/402633.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/402633.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2013/08/09/402633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/402633.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/402633.html</trackback:ping><description><![CDATA[<div>### &nbsp;Installing Gluster</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->wget&nbsp;-P&nbsp;/etc/yum.repos.d&nbsp;http:<span style="color: #008000; ">//</span><span style="color: #008000; ">download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/glusterfs-epel.repo</span></div></div><div></div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->yum&nbsp;install&nbsp;glusterfs{-fuse,-server}</div></div><div><br /># 查看gluster版本信息</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->glusterfs&nbsp;-V</div></div><div></div><div># 启动停止服务</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->service&nbsp;glusterd&nbsp;start<br />service&nbsp;glusterd&nbsp;stop</div></div><div></div><div># 存储主机加入信任存储池</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->gluster&nbsp;peer&nbsp;probe&nbsp;fs-server-2<br />gluster&nbsp;peer&nbsp;probe&nbsp;fs-server-3</div></div><div></div><div># 查看状态</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->gluster&nbsp;peer&nbsp;status</div></div><div></div><div># 五中类型的volume可以被创建：</div><div>&nbsp; &nbsp; Distributed：分布式卷，文件通过hash算法随机的分布到由bricks组成的卷上。</div><div>&nbsp; &nbsp; Replicated：复制式卷，类似raid1，replica数必须等于volume中brick所包含的存储服务器数，可用性高。</div><div>&nbsp; &nbsp; Striped：条带式卷，类似与raid0，stripe数必须等于volume中brick所包含的存储服务器数，文件被分成数据块，以Round Robin的方式存储在bricks中，并发粒度是数据块，大文件性能好。</div><div>&nbsp; &nbsp; Distributed Striped：分布式的条带卷，volume中brick所包含的存储服务器数必须是stripe的倍数(&gt;=2倍)，兼顾分布式和条带式的功能。</div><div>&nbsp; &nbsp; Distributed Replicated：分布式的复制卷，volume中brick所包含的存储服务器数必须是 replica 的倍数(&gt;=2倍)，兼顾分布式和复制式的功能。</div><div></div><div></div><div># 创建分布卷</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->gluster&nbsp;volume&nbsp;create&nbsp;gv0&nbsp;fs-server-1:/data/gfs&nbsp;fs-server-2:/data/gfs</div></div><div># 创建复制卷</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->gluster&nbsp;volume&nbsp;create&nbsp;gv0&nbsp;replica&nbsp;2&nbsp;fs-server-1:/data/gfs&nbsp;fs-server-2:/data/gfs</div></div><div># 创建条带卷</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->gluster&nbsp;volume&nbsp;create&nbsp;gv0&nbsp;stripe&nbsp;2&nbsp;fs-server-1:/data/gfs&nbsp;fs-server-2:/data/gfs</div></div><div></div><div># 启动卷</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->gluster&nbsp;volume&nbsp;start&nbsp;gv0</div></div><div></div><div># 查看卷</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->gluster&nbsp;volume&nbsp;info gv0</div></div><div></div><div>#如果以后要添加服务器，可以使用add-brick命令：</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->gluster&nbsp;volume&nbsp;add-brick&nbsp;gv0&nbsp;fs-server-3:/data/gfs&nbsp;fs-server-4:/data/gfs</div></div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->gluster&nbsp;volume&nbsp;remove-brick&nbsp;VOLNAME&nbsp;BRICK</div></div><div></div><div>注意：当你给分布式复制卷和分布式条带卷中增加bricks时，你增加的bricks的数目必须是复制或者条带数目的倍数，例如：你给一个分布式复制卷的replica为2，你在增加bricks的时候数量必须为2、4、6、8等。</div><div>&nbsp; &nbsp; &nbsp; 当移除分布式复制卷或者分布式条带卷的时候，移除的bricks数目必须是replica或者stripe的倍数。例如：一个分布式条带卷的stripe是2，当你移除bricks的时候必须是2、4、6、8等。</div><div></div><div>#挂载glusterfs</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->mount&nbsp;-t&nbsp;glusterfs&nbsp;fs-server-1:/gv0&nbsp;/mnt/gfs<br />mount&nbsp;-t&nbsp;nfs&nbsp;fs-server-1:/gv0&nbsp;/mnt/gfs<br />mount&nbsp;-v&nbsp;-t&nbsp;nfs&nbsp;-o&nbsp;mountproto=tcp,vers=3&nbsp;fs-server-1:/gv0&nbsp;/mnt/gfs-nfs</div></div><img src ="http://www.blogjava.net/envoydada/aggbug/402633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2013-08-09 16:00 <a href="http://www.blogjava.net/envoydada/archive/2013/08/09/402633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>KVM虚拟机克隆网络问题</title><link>http://www.blogjava.net/envoydada/archive/2013/08/07/402525.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Wed, 07 Aug 2013 10:14:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2013/08/07/402525.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/402525.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2013/08/07/402525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/402525.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/402525.html</trackback:ping><description><![CDATA[<span style="font-family: Monaco, Consolas, '&quot;Lucida Console&quot;', '&quot;Courier New&quot;', serif; font-size: 10pt; line-height: 21.59375px; background-color: #f7f7f7;">克隆KVM虚拟机时，网卡启动报错<br />
</span><span style="font-family: Monaco, Consolas, '&quot;Lucida Console&quot;', '&quot;Courier New&quot;', serif; font-size: 10pt; line-height: 21.59375px; background-color: #f7f7f7;">Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization<br />
</span><span style="font-family: Monaco, Consolas, '&quot;Lucida Console&quot;', '&quot;Courier New&quot;', serif; font-size: 10pt; line-height: 21.59375px; background-color: #f7f7f7;">查看</span><span style="font-family: Monaco, Consolas, '&quot;Lucida Console&quot;', '&quot;Courier New&quot;', serif; font-size: 10pt; line-height: 21.59375px; background-color: #f7f7f7;">/etc/udev/rules.d/70-persistent-net.rules文件<br />
</span>
<div><span style="font-size: 10pt;">原来UDEV这里把克隆前的MAC当成了当前虚拟机的eth0 MAC，而重新生成的是eth1的MAC。</span></div>
<span style="font-family: Monaco, Consolas, '&quot;Lucida Console&quot;', '&quot;Courier New&quot;', serif; font-size: 10pt; line-height: 21.59375px; background-color: #f7f7f7;">删除原虚拟机MAC地址行， 修改新MAC地址行的eth1为eth0; 同时修改ifcfg-eth0文件里的HWADDR为新MAC地址。重启网络或系统。</span><span style="font-family: Monaco, Consolas, '&quot;Lucida Console&quot;', '&quot;Courier New&quot;', serif; font-size: 12px; line-height: 21.59375px; background-color: #f7f7f7;"><br />
<br />
</span><img src ="http://www.blogjava.net/envoydada/aggbug/402525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2013-08-07 18:14 <a href="http://www.blogjava.net/envoydada/archive/2013/08/07/402525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NFS 防火墙设置</title><link>http://www.blogjava.net/envoydada/archive/2012/03/14/371875.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Wed, 14 Mar 2012 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2012/03/14/371875.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/371875.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2012/03/14/371875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/371875.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/371875.html</trackback:ping><description><![CDATA[<div>NFS 用到的服务有 portmapper nfs rquotad nlockmgr mountd<br /></div><div>通过命令 rpcinfo -p 可查看nfs使用的端口</div><div># rpcinfo -p</div><div>&nbsp; &nbsp;program vers proto &nbsp; port &nbsp;service</div><div>&nbsp; &nbsp; 100000 &nbsp; &nbsp;4 &nbsp; tcp &nbsp; &nbsp;111 &nbsp;portmapper</div><div>&nbsp; &nbsp; 100000 &nbsp; &nbsp;3 &nbsp; tcp &nbsp; &nbsp;111 &nbsp;portmapper</div><div>&nbsp; &nbsp; 100000 &nbsp; &nbsp;2 &nbsp; tcp &nbsp; &nbsp;111 &nbsp;portmapper</div><div>&nbsp; &nbsp; 100000 &nbsp; &nbsp;4 &nbsp; udp &nbsp; &nbsp;111 &nbsp;portmapper</div><div>&nbsp; &nbsp; 100000 &nbsp; &nbsp;3 &nbsp; udp &nbsp; &nbsp;111 &nbsp;portmapper</div><div>&nbsp; &nbsp; 100000 &nbsp; &nbsp;2 &nbsp; udp &nbsp; &nbsp;111 &nbsp;portmapper</div><div>&nbsp; &nbsp; 100024 &nbsp; &nbsp;1 &nbsp; udp &nbsp;53713 &nbsp;status</div><div>&nbsp; &nbsp; 100024 &nbsp; &nbsp;1 &nbsp; tcp &nbsp;47753 &nbsp;status</div><div>&nbsp; &nbsp; 100011 &nbsp; &nbsp;1 &nbsp; udp &nbsp; &nbsp;875 &nbsp;rquotad</div><div>&nbsp; &nbsp; 100011 &nbsp; &nbsp;2 &nbsp; udp &nbsp; &nbsp;875 &nbsp;rquotad</div><div>&nbsp; &nbsp; 100011 &nbsp; &nbsp;1 &nbsp; tcp &nbsp; &nbsp;875 &nbsp;rquotad</div><div>&nbsp; &nbsp; 100011 &nbsp; &nbsp;2 &nbsp; tcp &nbsp; &nbsp;875 &nbsp;rquotad</div><div>&nbsp; &nbsp; 100003 &nbsp; &nbsp;2 &nbsp; tcp &nbsp; 2049 &nbsp;nfs</div><div>&nbsp; &nbsp; 100003 &nbsp; &nbsp;3 &nbsp; tcp &nbsp; 2049 &nbsp;nfs</div><div>&nbsp; &nbsp; 100003 &nbsp; &nbsp;4 &nbsp; tcp &nbsp; 2049 &nbsp;nfs</div><div>&nbsp; &nbsp; 100227 &nbsp; &nbsp;2 &nbsp; tcp &nbsp; 2049 &nbsp;nfs_acl</div><div>&nbsp; &nbsp; 100227 &nbsp; &nbsp;3 &nbsp; tcp &nbsp; 2049 &nbsp;nfs_acl</div><div>&nbsp; &nbsp; 100003 &nbsp; &nbsp;2 &nbsp; udp &nbsp; 2049 &nbsp;nfs</div><div>&nbsp; &nbsp; 100003 &nbsp; &nbsp;3 &nbsp; udp &nbsp; 2049 &nbsp;nfs</div><div>&nbsp; &nbsp; 100003 &nbsp; &nbsp;4 &nbsp; udp &nbsp; 2049 &nbsp;nfs</div><div>&nbsp; &nbsp; 100227 &nbsp; &nbsp;2 &nbsp; udp &nbsp; 2049 &nbsp;nfs_acl</div><div>&nbsp; &nbsp; 100227 &nbsp; &nbsp;3 &nbsp; udp &nbsp; 2049 &nbsp;nfs_acl</div><div>&nbsp; &nbsp; 100021 &nbsp; &nbsp;1 &nbsp; udp &nbsp;40399 &nbsp;nlockmgr</div><div>&nbsp; &nbsp; 100021 &nbsp; &nbsp;3 &nbsp; udp &nbsp;40399 &nbsp;nlockmgr</div><div>&nbsp; &nbsp; 100021 &nbsp; &nbsp;4 &nbsp; udp &nbsp;40399 &nbsp;nlockmgr</div><div>&nbsp; &nbsp; 100021 &nbsp; &nbsp;1 &nbsp; tcp &nbsp;46247 &nbsp;nlockmgr</div><div>&nbsp; &nbsp; 100021 &nbsp; &nbsp;3 &nbsp; tcp &nbsp;46247 &nbsp;nlockmgr</div><div>&nbsp; &nbsp; 100021 &nbsp; &nbsp;4 &nbsp; tcp &nbsp;46247 &nbsp;nlockmgr</div><div>&nbsp; &nbsp; 100005 &nbsp; &nbsp;1 &nbsp; udp &nbsp;60639 &nbsp;mountd</div><div>&nbsp; &nbsp; 100005 &nbsp; &nbsp;1 &nbsp; tcp &nbsp;39962 &nbsp;mountd</div><div>&nbsp; &nbsp; 100005 &nbsp; &nbsp;2 &nbsp; udp &nbsp;51575 &nbsp;mountd</div><div>&nbsp; &nbsp; 100005 &nbsp; &nbsp;2 &nbsp; tcp &nbsp;42414 &nbsp;mountd</div><div>&nbsp; &nbsp; 100005 &nbsp; &nbsp;3 &nbsp; udp &nbsp;38358 &nbsp;mountd</div><div>&nbsp; &nbsp; 100005 &nbsp; &nbsp;3 &nbsp; tcp &nbsp;48741 &nbsp;mountd</div><div>其中 portmapper nfs 服务端口是固定的分别是 111 2049</div><div>另外 rquotad nlockmgr mountd 服务端口是随机的。由于端口是随机的，这导致防火墙无法设置。</div><div>这时需要配置/etc/sysconfig/nfs 使 rquotad nlockmgr mountd 的端口固定。</div><div>找到以下几项，将前面的#号去掉。</div><div>RQUOTAD_PORT=875</div><div>LOCKD_TCPPORT=32803</div><div>LOCKD_UDPPORT=32769</div><div>MOUNTD_PORT=892</div><div>#service nfs restart</div><div>&nbsp;</div><div>#rpcinfo -p</div><div>&nbsp; &nbsp;program vers proto &nbsp; port &nbsp;service</div><div>&nbsp; &nbsp; 100000 &nbsp; &nbsp;4 &nbsp; tcp &nbsp; &nbsp;111 &nbsp;portmapper</div><div>&nbsp; &nbsp; 100000 &nbsp; &nbsp;3 &nbsp; tcp &nbsp; &nbsp;111 &nbsp;portmapper</div><div>&nbsp; &nbsp; 100000 &nbsp; &nbsp;2 &nbsp; tcp &nbsp; &nbsp;111 &nbsp;portmapper</div><div>&nbsp; &nbsp; 100000 &nbsp; &nbsp;4 &nbsp; udp &nbsp; &nbsp;111 &nbsp;portmapper</div><div>&nbsp; &nbsp; 100000 &nbsp; &nbsp;3 &nbsp; udp &nbsp; &nbsp;111 &nbsp;portmapper</div><div>&nbsp; &nbsp; 100000 &nbsp; &nbsp;2 &nbsp; udp &nbsp; &nbsp;111 &nbsp;portmapper</div><div>&nbsp; &nbsp; 100024 &nbsp; &nbsp;1 &nbsp; udp &nbsp;53713 &nbsp;status</div><div>&nbsp; &nbsp; 100024 &nbsp; &nbsp;1 &nbsp; tcp &nbsp;47753 &nbsp;status</div><div>&nbsp; &nbsp; 100011 &nbsp; &nbsp;1 &nbsp; udp &nbsp; &nbsp;875 &nbsp;rquotad</div><div>&nbsp; &nbsp; 100011 &nbsp; &nbsp;2 &nbsp; udp &nbsp; &nbsp;875 &nbsp;rquotad</div><div>&nbsp; &nbsp; 100011 &nbsp; &nbsp;1 &nbsp; tcp &nbsp; &nbsp;875 &nbsp;rquotad</div><div>&nbsp; &nbsp; 100011 &nbsp; &nbsp;2 &nbsp; tcp &nbsp; &nbsp;875 &nbsp;rquotad</div><div>&nbsp; &nbsp; 100003 &nbsp; &nbsp;2 &nbsp; tcp &nbsp; 2049 &nbsp;nfs</div><div>&nbsp; &nbsp; 100003 &nbsp; &nbsp;3 &nbsp; tcp &nbsp; 2049 &nbsp;nfs</div><div>&nbsp; &nbsp; 100003 &nbsp; &nbsp;4 &nbsp; tcp &nbsp; 2049 &nbsp;nfs</div><div>&nbsp; &nbsp; 100227 &nbsp; &nbsp;2 &nbsp; tcp &nbsp; 2049 &nbsp;nfs_acl</div><div>&nbsp; &nbsp; 100227 &nbsp; &nbsp;3 &nbsp; tcp &nbsp; 2049 &nbsp;nfs_acl</div><div>&nbsp; &nbsp; 100003 &nbsp; &nbsp;2 &nbsp; udp &nbsp; 2049 &nbsp;nfs</div><div>&nbsp; &nbsp; 100003 &nbsp; &nbsp;3 &nbsp; udp &nbsp; 2049 &nbsp;nfs</div><div>&nbsp; &nbsp; 100003 &nbsp; &nbsp;4 &nbsp; udp &nbsp; 2049 &nbsp;nfs</div><div>&nbsp; &nbsp; 100227 &nbsp; &nbsp;2 &nbsp; udp &nbsp; 2049 &nbsp;nfs_acl</div><div>&nbsp; &nbsp; 100227 &nbsp; &nbsp;3 &nbsp; udp &nbsp; 2049 &nbsp;nfs_acl</div><div>&nbsp; &nbsp; 100021 &nbsp; &nbsp;1 &nbsp; udp &nbsp;32769 &nbsp;nlockmgr</div><div>&nbsp; &nbsp; 100021 &nbsp; &nbsp;3 &nbsp; udp &nbsp;32769 &nbsp;nlockmgr</div><div>&nbsp; &nbsp; 100021 &nbsp; &nbsp;4 &nbsp; udp &nbsp;32769 &nbsp;nlockmgr</div><div>&nbsp; &nbsp; 100021 &nbsp; &nbsp;1 &nbsp; tcp &nbsp;32803 &nbsp;nlockmgr</div><div>&nbsp; &nbsp; 100021 &nbsp; &nbsp;3 &nbsp; tcp &nbsp;32803 &nbsp;nlockmgr</div><div>&nbsp; &nbsp; 100021 &nbsp; &nbsp;4 &nbsp; tcp &nbsp;32803 &nbsp;nlockmgr</div><div>&nbsp; &nbsp; 100005 &nbsp; &nbsp;1 &nbsp; udp &nbsp; &nbsp;892 &nbsp;mountd</div><div>&nbsp; &nbsp; 100005 &nbsp; &nbsp;1 &nbsp; tcp &nbsp; &nbsp;892 &nbsp;mountd</div><div>&nbsp; &nbsp; 100005 &nbsp; &nbsp;2 &nbsp; udp &nbsp; &nbsp;892 &nbsp;mountd</div><div>&nbsp; &nbsp; 100005 &nbsp; &nbsp;2 &nbsp; tcp &nbsp; &nbsp;892 &nbsp;mountd</div><div>&nbsp; &nbsp; 100005 &nbsp; &nbsp;3 &nbsp; udp &nbsp; &nbsp;892 &nbsp;mountd</div><div>&nbsp; &nbsp; 100005 &nbsp; &nbsp;3 &nbsp; tcp &nbsp; &nbsp;892 &nbsp;mountd</div><div>设置防火墙</div><div>iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 111 -j ACCEPT</div><div>iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 875 -j ACCEPT</div><div>iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 2049 -j ACCEPT</div><div>iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 32769 -j ACCEPT</div><div>iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 32803 -j ACCEPT</div><div>iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 892 -j ACCEPT</div><div>iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 111 -j ACCEPT</div><div>iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 875 -j ACCEPT</div><div>iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 2049 -j ACCEPT</div><div>iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 32769 -j ACCEPT</div><div>iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 32803 -j ACCEPT</div><div>iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 892 -j ACCEPT<br /><br />查看IPTABLES<br /># iptables -L<br />保存IPTABLES<br /><div># iptables-save &gt;&nbsp;/etc/sysconfig/iptables</div><br /><br /><br /></div><img src ="http://www.blogjava.net/envoydada/aggbug/371875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2012-03-14 16:14 <a href="http://www.blogjava.net/envoydada/archive/2012/03/14/371875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 sendfile() 提升网络文件发送性能</title><link>http://www.blogjava.net/envoydada/archive/2011/12/29/367529.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Thu, 29 Dec 2011 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2011/12/29/367529.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/367529.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2011/12/29/367529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/367529.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/367529.html</trackback:ping><description><![CDATA[<div><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">我们平时通过网络发送文件时会用到的两个系统调用：<br /><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace; font-size: 13px; background-position: initial initial; background-repeat: initial initial; ">read(file, tmp_buf, len);<br />write(socket, tmp_buf, len);</code></p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">调用过程示意图如下：<br /><img src="http://hily.me/blog/wp-content/uploads/2011/01/6345f1.jpg" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; "  alt="" /></p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">在用户空间调用 read() 读取文件时发生两次内存拷贝：</p><ol style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 1.5em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; list-style-position: initial; list-style-image: initial; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; "><li style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">DMA引擎将文件读取到内核的文件缓冲区</li><li style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">调用返回用户空间时将内核的文件缓冲区的数据复制到用户空间的缓冲区</li></ol><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">接着调用 write() 把数据写入 socket 时，又发生了两次内存拷贝：</p><ol style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 1.5em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; list-style-position: initial; list-style-image: initial; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; "><li style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">将用户空间的缓冲区的数据复制到内核的 socket 缓冲区</li><li style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">将内核 socket 缓冲区的数据复制到网络协议引擎</li></ol><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">也就是说，在整个文件发送的过程中，发生了四次内存拷贝。<br />然后，数据读取到用户空间后并没有做过任何加工处理，因此通过网络发送文件时，根本没有必要把文件内容复制到用户空间。</p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">于是引入了 mmap()：<br /><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace; font-size: 13px; background-position: initial initial; background-repeat: initial initial; ">tmp_buf = mmap(file, len);<br />write(socket, tmp_buf, len);</code></p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">调用过程示意图：<br /><img src="http://hily.me/blog/wp-content/uploads/2011/01/6345f2.jpg" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; "  alt="" /></p><ol style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 1.5em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; list-style-position: initial; list-style-image: initial; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; "><li style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">调用 mmap() 时会将文件直接读取到内核缓冲区，并把内核缓冲区直接共享到用户空间</li><li style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">调用 write() 时，直接将内核缓冲区的数据复制到网络协议引擎</li></ol><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">这样一来，就少了用户空间和内核空间之间的内存复制了。<br />这种方式会有个问题，当前进程在调用 write() 时，另一个进程把文件清空了，程序就会报出 SIGBUS 类型错误。</p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">Linux Kernel 2.1 引进了 sendfile()，只需要一个系统调用来实现文件发送。<br /><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace; font-size: 13px; background-position: initial initial; background-repeat: initial initial; ">sendfile(socket, file, len);</code></p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">调用过程示意图：<br /><img src="http://hily.me/blog/wp-content/uploads/2011/01/6345f3.jpg" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; "  alt="" /></p><ol style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 1.5em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; list-style-position: initial; list-style-image: initial; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; "><li style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">调用 sendfile() 时会直接在内核空间把文件读取到内核的文件缓冲区</li><li style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">将内核的文件缓冲区的数据复制到内核的 socket 缓冲区中</li><li style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">将内核的 socket 缓冲区的数据复制到网络协议引擎</li></ol><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">从性能上看，这种方式只是少了一个系统调用而已，还是做了3次拷贝操作。</p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">Linux Kernel 2.4 改进了 sendfile()，调用接口没有变化：<br /><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace; font-size: 13px; background-position: initial initial; background-repeat: initial initial; ">sendfile(socket, file, len);</code></p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">调用过程示意图：<br /><img src="http://hily.me/blog/wp-content/uploads/2011/01/6345f4.jpg" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; "  alt="" /></p><ol style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 1.5em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; list-style-position: initial; list-style-image: initial; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; "><li style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">调用 sendfile() 时会直接在内核空间把文件读取到内核的文件缓冲区</li><li style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">内核的 socket 缓冲区中保存的是当前要发送的数据在内核的文件缓冲区中的位置和偏移量</li><li style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">DMA gather copy 将内核的文件缓冲区的数据复制到网络协议引擎</li></ol><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">这样就只剩下2次拷贝啦。</p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; ">在许多 http server 中，都引入了 sendfile 的机制，如 nginx、lighttpd 等，它们正是利用 sendfile() 这个特性来实现高性能的文件发送的。</p></div><img src ="http://www.blogjava.net/envoydada/aggbug/367529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2011-12-29 21:32 <a href="http://www.blogjava.net/envoydada/archive/2011/12/29/367529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web服务器性能/压力测试工具http_load、webbench、ab、Siege(转)</title><link>http://www.blogjava.net/envoydada/archive/2011/03/15/346300.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Tue, 15 Mar 2011 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2011/03/15/346300.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/346300.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2011/03/15/346300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/346300.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/346300.html</trackback:ping><description><![CDATA[<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; "><strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">一、http_load</strong></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">程序非常小，解压后也不到100K</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">http_load以并行复用的方式运行，用以测试web服务器的吞吐量与负载。但是它不同于大多数压力测试工</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">具，它可以以一个单一的进程运行，一般不会把客户机搞死。还可以测试HTTPS类的网站请求。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">下载地址：<a href="http://soft.vpser.net/test/http_load/http_load-12mar2006.tar.gz" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://soft.vpser.net/test/http_load/http_load-12mar2006.tar.gz</a><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
安装很简单<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
#tar zxvf http_load-12mar2006.tar.gz<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
#cd http_load-12mar2006<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
#make &amp;&amp; make install</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">命令格式：http_load&nbsp; -p 并发访问进程数&nbsp; -s 访问时间&nbsp; 需要访问的URL文件</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">参数其实可以自由组合，参数之间的选择并没有什么限制。比如你写成http_load -parallel 5 -seconds</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">300 urls.txt也是可以的。我们把参数给大家简单说明一下。<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-parallel 简写-p ：含义是并发的用户进程数。<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-fetches 简写-f ：含义是总计的访问次数<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-rate&nbsp;&nbsp;&nbsp; 简写-p ：含义是每秒的访问频率<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-seconds简写-s ：含义是总计的访问时间</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">准备URL文件：urllist.txt，文件格式是每行一个URL，URL最好超过50－100个测试效果比较好.文件格式</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">如下：<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
<a href="http://www.vpser.net/uncategorized/choose-vps.html" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://www.vpser.net/uncategorized/choose-vps.html</a><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
<a href="http://www.vpser.net/vps-cp/hypervm-tutorial.html" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://www.vpser.net/vps-cp/hypervm-tutorial.html</a><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
<a href="http://www.vpser.net/coupons/diavps-april-coupons.html" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://www.vpser.net/coupons/diavps-april-coupons.html</a><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
<a href="http://www.vpser.net/security/vps-backup-web-mysql.html" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://www.vpser.net/security/vps-backup-web-mysql.html</a><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
例如：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">http_load -p 30 -s 60&nbsp; urllist.txt<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
参数了解了，我们来看运行一条命令来看看它的返回结果<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
命令：% ./http_load -rate 5 -seconds 10 urls说明执行了一个持续时间10秒的测试，每秒的频率为5。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds5916 mean bytes/connection4.89274</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">fetches/sec, 28945.5 bytes/secmsecs/connect: 28.8932 mean, 44.243 max, 24.488 minmsecs/first</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">-response: 63.5362 mean, 81.624 max, 57.803 minHTTP response codes: code 200 — 49&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">结果分析：<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
1．49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
说明在上面的测试中运行了49个请求，最大的并发进程数是2，总计传输的数据是289884bytes，运行的时间是10.0148秒<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
2．5916 mean bytes/connection说明每一连接平均传输的数据量289884/49=5916<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
3．4.89274 fetches/sec, 28945.5 bytes/sec<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
说明每秒的响应请求为4.89274，每秒传递的数据为28945.5 bytes/sec<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
4．msecs/connect: 28.8932 mean, 44.243 max, 24.488 min说明每连接的平均响应时间是28.8932 msecs</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">，最大的响应时间44.243 msecs，最小的响应时间24.488 msecs<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
5．msecs/first-response: 63.5362 mean, 81.624 max, 57.803 min<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
6、HTTP response codes: code 200 — 49&nbsp;&nbsp;&nbsp;&nbsp; 说明打开响应页面的类型，如果403的类型过多，那可能</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">要注意是否系统遇到了瓶颈。<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
特殊说明：<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
测试结果中主要的指标是 fetches/sec、msecs/connect 这个选项，即服务器每秒能够响应的查询次数，</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">用这个指标来衡量性能。似乎比 apache的ab准确率要高一些，也更有说服力一些。<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Qpt-每秒响应用户数和response time，每连接响应用户时间。<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
测试的结果主要也是看这两个值。当然仅有这两个指标并不能完成对性能的分析，我们还需要对服务器的</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">cpu、men进行分析，才能得出结论</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; "><strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">二、webbench</strong></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">webbench是Linux下的一个网站压力测试工具，最多可以模拟3万个并发连接去测试网站的负载能力。下载地址可以到google搜，我这里给出一个<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
下载地址：<a href="http://soft.vpser.net/test/webbench/webbench-1.5.tar.gz" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://soft.vpser.net/test/webbench/webbench-1.5.tar.gz</a><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
这个程序更小，解压后不到50K，呵呵<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
安装非常简单<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
#tar zxvf webbench-1.5.tar.gz<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
#cd webbench-1.5<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
#make &amp;&amp; make install<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
会在当前目录生成webbench可执行文件，直接可以使用了</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">用法：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">webbench -c 并发数 -t 运行测试时间 URL<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
如：<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
webbench -c 5000 -t 120&nbsp;<a href="http://www.vpser.net/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://www.vpser.net</a></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; "><strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">三、ab</strong><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
ab是apache自带的一款功能强大的测试工具<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
安装了apache一般就自带了，<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
用法可以查看它的说明</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">$ ./ab<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
./ab: wrong number of arguments<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Usage: ./ab [options] [http://]hostname[:port]/path<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Options are:<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-n requests Number of requests to perform<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-c concurrency Number of multiple requests to make<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-t timelimit Seconds to max. wait for responses<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-p postfile File containing data to POST<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-T content-type Content-type header for POSTing<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-v verbosity How much troubleshooting info to print<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-w Print out results in HTML tables<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-i Use HEAD instead of GET<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-x attributes String to insert as table attributes<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-y attributes String to insert as tr attributes<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-z attributes String to insert as td or th attributes<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-C attribute Add cookie, eg. &#8216;Apache=1234. (repeatable)<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-H attribute Add Arbitrary header line, eg. &#8216;Accept-Encoding: gzip&#8217;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Inserted after all normal header lines. (repeatable)<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-A attribute Add Basic WWW Authentication, the attributes<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
are a colon separated username and password.<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-P attribute Add Basic Proxy Authentication, the attributes<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
are a colon separated username and password.<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-X proxy:port Proxyserver and port number to use<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-V Print version number and exit<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-k Use HTTP KeepAlive feature<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-d Do not show percentiles served table.<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-S Do not show confidence estimators and warnings.<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-g filename Output collected data to gnuplot format file.<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-e filename Output CSV file with percentages served<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-h Display usage information (this message)<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
参数众多，一般我们用到的是-n 和-c<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
例如：<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
./ab -c 1000 -n 100&nbsp;<a href="http://www.vpser.net/index.php" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://www.vpser.net/index.php</a></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">这个表示同时处理1000个请求并运行100次index.php文件.<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
<strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">四、Siege<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
</strong>一款开源的压力测试工具，可以根据配置对一个WEB站点进行多用户的并发访问，记录每个用户所有请求过程的相应时间，并在一定数量的并发访问下重复进行。<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
官方：<a href="http://www.joedog.org/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://www.joedog.org/</a><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Siege下载：<a href="http://soft.vpser.net/test/siege/siege-2.67.tar.gz" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://soft.vpser.net/test/siege/siege-2.67.tar.gz</a><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
解压：<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
# tar -zxf siege-2.67.tar.gz<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
进入解压目录：<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
# cd siege-2.67/<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
安装：<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
#./configure ; make<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
#make install</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">使用<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
siege -c 200 -r 10 -f example.url<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
-c是并发量，-r是重复次数。 url文件就是一个文本，每行都是一个url，它会从里面随机访问的。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">example.url内容:</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; "><a href="http://www.licess.cn/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://www.licess.cn</a><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
<a href="http://www.vpser.net/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://www.vpser.net</a><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
<a href="http://soft.vpser.net/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #3e62a6; outline-width: 0px; outline-style: initial; outline-color: initial; ">http://soft.vpser.net</a></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 5px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 0em; font-family: Verdana, Simsun, sans-serif; font-size: 13px; line-height: 22px; ">结果说明<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Lifting the server siege&#8230; done.<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Transactions: 3419263 hits //完成419263次处理<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Availability: 100.00 % //100.00 % 成功率<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Elapsed time: 5999.69 secs //总共用时<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Data transferred: 84273.91 MB //共数据传输84273.91 MB<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Response time: 0.37 secs //相应用时1.65秒：显示网络连接的速度<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Transaction rate: 569.91 trans/sec //均每秒完成 569.91 次处理：表示服务器后<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Throughput: 14.05 MB/sec //平均每秒传送数据<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Concurrency: 213.42 //实际最高并发数<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Successful transactions: 2564081 //成功处理次数<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Failed transactions: 11 //失败处理次数<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Longest transaction: 29.04 //每次传输所花最长时间<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />
Shortest transaction: 0.00 //每次传输所花最短时间</p>
<img src ="http://www.blogjava.net/envoydada/aggbug/346300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2011-03-15 11:47 <a href="http://www.blogjava.net/envoydada/archive/2011/03/15/346300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Magent：Memcached集群代理</title><link>http://www.blogjava.net/envoydada/archive/2010/07/13/325947.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Tue, 13 Jul 2010 05:28:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/07/13/325947.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/325947.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/07/13/325947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/325947.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/325947.html</trackback:ping><description><![CDATA[Magent是一款开源的Memcached代理服务器软件，其项目网址为 http://code.google.com/p/memagent/，防止单点现象，缓存代理也可以做备份，通过客户端连接到缓存代理服务器，缓存代理服务 器连接缓存服务器。<span style="font-family: arial, sans-serif; font-size: 13px; ">
<h3 style="font-size: medium; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; border-top-width: 0px; border-top-style: solid; border-top-color: #3366cc; padding-top: 0.5ex; padding-right: 0.5em; padding-bottom: 0.5ex; padding-left: 0px; margin-right: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; background-position: initial initial; background-repeat: initial initial; "><a name="Notes:">Notes:</a><a href="http://code.google.com/p/memagent/#Notes:" class="section_anchor" style="color: #bbbbbb; display: inline; text-decoration: none; margin-left: 0.7em; font-weight: lighter; font-size: 14px; ">&#182;</a></h3>
<ol style="max-width: 65em; padding-left: 40px; ">
    <li>current magent's speed is about 80% of memcached's. finding way to speed it up(not good)</li>
    <li>adding backup server does no harm to magent's performance. (good)</li>
    <li>magent's cpu usage is less than memcached's and has very little memory usage. (good)
    </li>
</ol>
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">一、安装步骤：<br />
1、编译安装libevent：</p>
<div class="dp-highlighter" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; width: 694px; overflow-x: auto; overflow-y: auto; margin-left: 9px; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; ">
<ol start="1" class="dp-j" style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; list-style-type: decimal; list-style-position: initial; list-style-image: initial; background-color: #ffffff; color: #2b91af; ">
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; "><span style="color: black; ">wget&nbsp;http:</span><span class="comment" style="color: #008200; ">//monkey.org/~provos/libevent-1.4.9-stable.tar.gz</span><span style="color: black; ">&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">tar&nbsp;zxvf&nbsp;libevent-<span class="number" style="color: #c00000; ">1.4</span><span style="color: black; ">.</span><span class="number" style="color: #c00000; ">9</span><span style="color: black; ">-stable.tar.gz&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">cd&nbsp;libevent-<span class="number" style="color: #c00000; ">1.4</span><span style="color: black; ">.</span><span class="number" style="color: #c00000; ">9</span><span style="color: black; ">-stable/&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">./configure&nbsp;--prefix=/usr&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">make&nbsp;&amp;&amp;&nbsp;make&nbsp;install&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">cd&nbsp;../&nbsp;&nbsp;</span></li>
</ol>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;2、编译安装Memcached：</p>
<div class="dp-highlighter" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; width: 694px; overflow-x: auto; overflow-y: auto; margin-left: 9px; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; ">
<ol start="1" class="dp-j" style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; list-style-type: decimal; list-style-position: initial; list-style-image: initial; background-color: #ffffff; color: #2b91af; ">
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; "><span style="color: black; ">wget&nbsp;http:</span><span class="comment" style="color: #008200; ">//danga.com/memcached/dist/memcached-1.2.6.tar.gz</span><span style="color: black; ">&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">tar&nbsp;zxvf&nbsp;memcached-<span class="number" style="color: #c00000; ">1.2</span><span style="color: black; ">.</span><span class="number" style="color: #c00000; ">6</span><span style="color: black; ">.tar.gz&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">cd&nbsp;memcached-<span class="number" style="color: #c00000; ">1.2</span><span style="color: black; ">.</span><span class="number" style="color: #c00000; ">6</span><span style="color: black; ">/&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">./configure&nbsp;--with-libevent=/usr&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">make&nbsp;&amp;&amp;&nbsp;make&nbsp;install&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">cd&nbsp;../&nbsp;&nbsp;</span></li>
</ol>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;3、编译安装magent：</p>
<div class="dp-highlighter" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; width: 694px; overflow-x: auto; overflow-y: auto; margin-left: 9px; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; background-color: transparent; ">
<ol start="1" class="dp-j" style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; list-style-type: decimal; list-style-position: initial; list-style-image: initial; background-color: #ffffff; color: #2b91af; ">
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; "><span style="color: black; ">mkdir&nbsp;magent&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">cd&nbsp;magent/&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">wget&nbsp;http:<span class="comment" style="color: #008200; ">//memagent.googlecode.com/files/magent-0.5.tar.gz</span><span style="color: black; ">&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">tar&nbsp;zxvf&nbsp;magent-<span class="number" style="color: #c00000; ">0.5</span><span style="color: black; ">.tar.gz&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">/sbin/ldconfig&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">sed&nbsp;-i&nbsp;<span class="string" style="color: blue; ">"s#LIBS&nbsp;=&nbsp;-levent#LIBS&nbsp;=&nbsp;-levent&nbsp;-lm#g"</span><span style="color: black; ">&nbsp;Makefile&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">make&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">cp&nbsp;magent&nbsp;/usr/bin/magent&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">cd&nbsp;../&nbsp;&nbsp;</span></li>
</ol>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">二、使用实例：</strong></p>
<div class="dp-highlighter" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; width: 694px; overflow-x: auto; overflow-y: auto; margin-left: 9px; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; ">
<ol start="1" class="dp-j" style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; list-style-type: decimal; list-style-position: initial; list-style-image: initial; background-color: #ffffff; color: #2b91af; ">
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; "><span style="color: black; ">memcached&nbsp;-m&nbsp;</span><span class="number" style="color: #c00000; ">1</span><span style="color: black; ">&nbsp;-u&nbsp;root&nbsp;-d&nbsp;-l&nbsp;</span><span class="number" style="color: #c00000; ">127.0</span><span style="color: black; ">.</span><span class="number" style="color: #c00000; ">0.1</span><span style="color: black; ">&nbsp;-p&nbsp;</span><span class="number" style="color: #c00000; ">11211</span><span style="color: black; ">&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">memcached&nbsp;-m&nbsp;<span class="number" style="color: #c00000; ">1</span><span style="color: black; ">&nbsp;-u&nbsp;root&nbsp;-d&nbsp;-l&nbsp;</span><span class="number" style="color: #c00000; ">127.0</span><span style="color: black; ">.</span><span class="number" style="color: #c00000; ">0.1</span><span style="color: black; ">&nbsp;-p&nbsp;</span><span class="number" style="color: #c00000; ">11212</span><span style="color: black; ">&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">memcached&nbsp;-m&nbsp;<span class="number" style="color: #c00000; ">1</span><span style="color: black; ">&nbsp;-u&nbsp;root&nbsp;-d&nbsp;-l&nbsp;</span><span class="number" style="color: #c00000; ">127.0</span><span style="color: black; ">.</span><span class="number" style="color: #c00000; ">0.1</span><span style="color: black; ">&nbsp;-p&nbsp;</span><span class="number" style="color: #c00000; ">11213</span><span style="color: black; ">&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">magent&nbsp;-u&nbsp;root&nbsp;-n&nbsp;<span class="number" style="color: #c00000; ">51200</span><span style="color: black; ">&nbsp;-l&nbsp;</span><span class="number" style="color: #c00000; ">127.0</span><span style="color: black; ">.</span><span class="number" style="color: #c00000; ">0.1</span><span style="color: black; ">&nbsp;-p&nbsp;</span><span class="number" style="color: #c00000; ">12000</span><span style="color: black; ">&nbsp;-s&nbsp;</span><span class="number" style="color: #c00000; ">127.0</span><span style="color: black; ">.</span><span class="number" style="color: #c00000; ">0.1</span><span style="color: black; ">:</span><span class="number" style="color: #c00000; ">11211</span><span style="color: black; ">&nbsp;-s&nbsp;</span><span class="number" style="color: #c00000; ">127.0</span><span style="color: black; ">.</span><span class="number" style="color: #c00000; ">0.1</span><span style="color: black; ">:</span><span class="number" style="color: #c00000; ">11212</span><span style="color: black; ">&nbsp;&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">-b&nbsp;<span class="number" style="color: #c00000; ">127.0</span><span style="color: black; ">.</span><span class="number" style="color: #c00000; ">0.1</span><span style="color: black; ">:</span><span class="number" style="color: #c00000; ">11213</span><span style="color: black; ">&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1、分别在11211、11212、11213端口启动3个Memcached进程，在12000端口开启magent代理程序；<br />
2、11211、11212端口为主Memcached，11213端口为备份Memcached；<br />
3、连接上12000的magent，set key1和set key2，根据哈希算法，key1被写入11212和11213端口的Memcached，key2被写入11212和11213端口的Memcached；<br />
4、当11211、11212端口的Memcached死掉，连接到12000端口的magent取数据，数据会从11213端口的Memcached取出；<br />
5、当11211、11212端口的Memcached重启复活，连接到12000端口，magent会从11211或11212端口的 Memcached取数据，由于这两台Memcached重启后无数据，因此magent取得的将是空值，尽管11213端口的Memcached还有数 据（此问题尚待改进）。</p>
</span>
<img src ="http://www.blogjava.net/envoydada/aggbug/325947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-07-13 13:28 <a href="http://www.blogjava.net/envoydada/archive/2010/07/13/325947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mongodb Import Export Tools</title><link>http://www.blogjava.net/envoydada/archive/2010/07/05/325305.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Mon, 05 Jul 2010 09:52:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/07/05/325305.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/325305.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/07/05/325305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/325305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/325305.html</trackback:ping><description><![CDATA[<span style="color: #4c3a2c; font-family: helvetica, arial, sans-serif; font-size: 13px; line-height: 17px; ">
<h1 id="title-heading" class="pagetitle" style="margin-top: 0.125em !important; margin-right: 0px !important; margin-bottom: 0.125em !important; margin-left: 0px !important; line-height: 2; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18pt; color: #4c3a2c !important; text-decoration: none !important; width: 950px; "><span id="title-text" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><a href="http://www.mongodb.org/display/DOCS/Import+Export+Tools" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; ">Import Export Tools</a></span></h1>
<div id="content" class="page view" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; clear: left; ">
<table cellspacing="2" cellpadding="5" style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; font-size: 10pt; line-height: 1.3; color: #000000; font-weight: normal; clear: left; width: 950px; ">
    <tbody style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
        <tr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 10pt; line-height: 1.3; color: #000000; font-weight: normal; ">
            <td valign="top" align="left" width="78%" class="pagecontent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 10pt; line-height: 1.3; color: #000000; font-weight: normal; padding-right: 20px; ">
            <div class="wiki-content" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 10pt; line-height: 13pt; ">
            <div class="panelMacro" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; overflow-x: hidden; overflow-y: hidden; ">
            <table class="noteMacro" style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; clear: left; background-color: #ffffce; text-align: left; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; width: 632px; ">
                <colgroup style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><col width="24" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><col style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "></colgroup>
                <tbody style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
                    <tr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; ">
                        <td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 1em; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 14px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; border-width: initial; border-color: initial; "><img src="http://www.mongodb.org/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /></td>
                        <td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 1em; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 14px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; border-width: initial; border-color: initial; ">These tool just work with the raw data (the documents in the collection); they do not save, or load, the metadata like the defined indexes or (capped) collection properties. You will need to (re)create those yourself in a separate step, before loading that data. Vote&nbsp;<a href="http://jira.mongodb.org/browse/SERVER-808" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none; color: #003366; ">here</a>&nbsp;to change this.</td>
                    </tr>
                </tbody>
            </table>
            </div>
            <h3 style="margin-top: 20px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; color: #003366; text-decoration: none !important; "><a name="ImportExportTools-mongoimport" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a>mongoimport</h3>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">This utility takes a single file that contains 1 JSON/CSV/TSV string per line and inserts it. You have to specify a database and a collection.</p>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">options:
            --help                  produce help message
            -v [ --verbose ]        be more verbose (include multiple times <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> more
            <span class="Apple-tab-span" style="white-space:pre">			</span>    verbosity e.g. -vvvvv)
            -h [ --host ] arg       mongo host to connect to (<span class="code-quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #009100; background-color: inherit; ">"left,right"</span> <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> pairs)
            -d [ --db ] arg         database to use
            -c [ --collection ] arg collection to use (some commands)
            -u [ --username ] arg   username
            -p [ --password ] arg   password
            --dbpath arg            directly access mongod data files in the given path,
            <span class="Apple-tab-span" style="white-space:pre">			</span>    instead of connecting to a mongod instance - needs to
            <span class="Apple-tab-span" style="white-space:pre">			</span>    lock the data directory, so cannot be used <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> a
            <span class="Apple-tab-span" style="white-space:pre">			</span>    mongod is currently accessing the same path
            --directoryperdb        <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> dbpath specified, each db is in a separate
            directory
            -f [ --fields ] arg     comma seperated list of field names e.g. -f name,age
            --fieldFile arg         file with fields names - 1 per line
            --ignoreBlanks          <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> given, empty fields in csv and tsv will be ignored
            --type arg              type of file to <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">import</span>.  <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">default</span>: json (json,csv,tsv)
            --file arg              file to <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">import</span> from; <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> not specified stdin is used
            --drop                  drop collection first
            --headerline            CSV,TSV only - use first line as headers
            </pre>
            </div>
            </div>
            <h3 style="margin-top: 20px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; color: #003366; text-decoration: none !important; "><a name="ImportExportTools-mongoexport" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a>mongoexport</h3>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">This utility takes a collection and exports to either JSON or CSV. You can specify a filter for the query, or a list of fields to output.</p>
            <div class="panelMacro" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; overflow-x: hidden; overflow-y: hidden; ">
            <table class="noteMacro" style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; clear: left; background-color: #ffffce; text-align: left; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; width: 632px; ">
                <colgroup style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><col width="24" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><col style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "></colgroup>
                <tbody style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
                    <tr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; ">
                        <td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 1em; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 14px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; border-width: initial; border-color: initial; "><img src="http://www.mongodb.org/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /></td>
                        <td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 1em; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 14px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; border-width: initial; border-color: initial; ">Neither JSON nor TSV/CSV can represent all data types. Please be careful not to lose or change data (types) when using this. For full fidelity please use mongodump.</td>
                    </tr>
                </tbody>
            </table>
            </div>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">If you want to output CSV, you have to specify the fields in the order you want them.</p>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">Example</p>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">options:
            --help                  produce help message
            -v [ --verbose ]        be more verbose (include multiple times <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> more
            <span class="Apple-tab-span" style="white-space:pre">			</span>    verbosity e.g. -vvvvv)
            -h [ --host ] arg       mongo host to connect to (<span class="code-quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #009100; background-color: inherit; ">"left,right"</span> <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> pairs)
            -d [ --db ] arg         database to use
            -c [ --collection ] arg collection to use (some commands)
            -u [ --username ] arg   username
            -p [ --password ] arg   password
            --dbpath arg            directly access mongod data files in the given path,
            <span class="Apple-tab-span" style="white-space:pre">			</span>    instead of connecting to a mongod instance - needs to
            <span class="Apple-tab-span" style="white-space:pre">			</span>    lock the data directory, so cannot be used <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> a
            <span class="Apple-tab-span" style="white-space:pre">			</span>    mongod is currently accessing the same path
            --directoryperdb        <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> dbpath specified, each db is in a separate
            directory
            -q [ --query ] arg      query filter, as a JSON string
            -f [ --fields ] arg     comma seperated list of field names e.g. -f name,age
            --csv                   export to csv instead of json
            -o [ --out ] arg        output file; <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> not specified, stdout is used
            </pre>
            </div>
            </div>
            <h3 style="margin-top: 20px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; color: #003366; text-decoration: none !important; "><a name="ImportExportTools-mongodump" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a>mongodump</h3>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">This takes a database and outputs it in a binary representation. This is mostly used for doing hot backups of a database.</p>
            <div class="panelMacro" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; overflow-x: hidden; overflow-y: hidden; ">
            <table class="noteMacro" style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; clear: left; background-color: #ffffce; text-align: left; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; width: 632px; ">
                <colgroup style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><col width="24" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><col style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "></colgroup>
                <tbody style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
                    <tr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; ">
                        <td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 1em; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 14px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; border-width: initial; border-color: initial; "><img src="http://www.mongodb.org/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /></td>
                        <td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 1em; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 14px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; border-width: initial; border-color: initial; ">If you're using sharding and try to migrate data this way, this will dump shard configuration information and overwrite configurations upon restore.</td>
                    </tr>
                </tbody>
            </table>
            </div>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">options:
            --help                   produce help message
            -v [ --verbose ]         be more verbose (include multiple times <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> more
            <span class="Apple-tab-span" style="white-space:pre">			</span>     verbosity e.g. -vvvvv)
            -h [ --host ] arg        mongo host to connect to (<span class="code-quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #009100; background-color: inherit; ">"left,right"</span> <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> pairs)
            -d [ --db ] arg          database to use
            -c [ --collection ] arg  collection to use (some commands)
            -u [ --username ] arg    username
            -p [ --password ] arg    password
            --dbpath arg             directly access mongod data files in the given path,
            <span class="Apple-tab-span" style="white-space:pre">			</span>     instead of connecting to a mongod instance - needs
            <span class="Apple-tab-span" style="white-space:pre">			</span>     to lock the data directory, so cannot be used <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> a
            <span class="Apple-tab-span" style="white-space:pre">				</span>     mongod is currently accessing the same path
            --directoryperdb         <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> dbpath specified, each db is in a separate
            directory
            -o [ --out ] arg (=dump) output directory
            </pre>
            </div>
            </div>
            <h4 style="margin-top: 14px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12pt; color: #003366; text-decoration: none !important; "><a name="ImportExportTools-Example%3ADumpingEverything" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a>Example: Dumping Everything</h4>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">To dump all of the collections in all of the databases, run&nbsp;<tt style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">mongodump</tt>&nbsp;with just the&nbsp;<tt style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">--host</tt>:</p>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">$ ./mongodump --host prod.example.com
            connected to: prod.example.com
            all dbs
            DATABASE: log    to   dump/log
            log.errors to dump/log/errors.bson
            713 objects
            log.analytics to dump/log/analytics.bson
            234810 objects
            DATABASE: blog    to    dump/blog
            blog.posts to dump/log/blog.posts.bson
            59 objects
            DATABASE: admin    to    dump/admin
            </pre>
            </div>
            </div>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">You'll then have a folder called "dump" in your current directory.</p>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">If you're running&nbsp;<tt style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">mongod</tt>&nbsp;locally on the default port, you can just do:</p>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">$ ./mongodump
            </pre>
            </div>
            </div>
            <h4 style="margin-top: 14px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12pt; color: #003366; text-decoration: none !important; "><a name="ImportExportTools-Example%3ADumpingaSingleCollection" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a>Example: Dumping a Single Collection</h4>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">If we just want to dump a single collection, we can specify it and get a single .bson file.</p>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">$ ./mongodump --db blog --collection posts
            connected to: 127.0.0.1
            DATABASE: blog        to     dump/blog
            blog.posts to dump/blog/posts.bson
            59 objects
            </pre>
            </div>
            </div>
            <h3 style="margin-top: 20px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; color: #003366; text-decoration: none !important; "><a name="ImportExportTools-mongorestore" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a>mongorestore</h3>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">This takes the output from mongodump and restores it.</p>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">usage: ./mongorestore [options] [directory or filename to restore from]
            options:
            --help                  produce help message
            -v [ --verbose ]        be more verbose (include multiple times <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> more
            <span class="Apple-tab-span" style="white-space:pre">			</span>    verbosity e.g. -vvvvv)
            -h [ --host ] arg       mongo host to connect to (<span class="code-quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #009100; background-color: inherit; ">"left,right"</span> <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> pairs)
            -d [ --db ] arg         database to use
            -c [ --collection ] arg collection to use (some commands)
            -u [ --username ] arg   username
            -p [ --password ] arg   password
            --dbpath arg            directly access mongod data files in the given path,
            <span class="Apple-tab-span" style="white-space:pre">				</span>    instead of connecting to a mongod instance - needs to
            <span class="Apple-tab-span" style="white-space:pre">				</span>    lock the data directory, so cannot be used <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> a
            <span class="Apple-tab-span" style="white-space:pre">			</span>    mongod is currently accessing the same path
            --directoryperdb        <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> dbpath specified, each db is in a separate
            directory
            --drop                  drop each collection before <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">import</span>
            --objcheck              validate object before inserting</pre>
            </div>
            </div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</div>
</span>
<img src ="http://www.blogjava.net/envoydada/aggbug/325305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-07-05 17:52 <a href="http://www.blogjava.net/envoydada/archive/2010/07/05/325305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mongodb dbshell Reference</title><link>http://www.blogjava.net/envoydada/archive/2010/07/05/325266.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Mon, 05 Jul 2010 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/07/05/325266.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/325266.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/07/05/325266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/325266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/325266.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Command Line                                    --help                                    Show            command line options                                              ...&nbsp;&nbsp;<a href='http://www.blogjava.net/envoydada/archive/2010/07/05/325266.html'>阅读全文</a><img src ="http://www.blogjava.net/envoydada/aggbug/325266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-07-05 11:15 <a href="http://www.blogjava.net/envoydada/archive/2010/07/05/325266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转mongodb入门</title><link>http://www.blogjava.net/envoydada/archive/2010/06/23/324266.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Wed, 23 Jun 2010 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/06/23/324266.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/324266.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/06/23/324266.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/324266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/324266.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 获取数据库下载数据库, 解包, 运行mongod:$ bin/mongod连接数据库现在我们通过数据库的shell来实际操作一下。（注意：任何编程语言都可以通过合适的驱动进行类似的操作.只不过shell的方式更方便交互操作。）运行MongoDB JavaScript shell:$ bin/mongo(默认情况下shell将连接本...&nbsp;&nbsp;<a href='http://www.blogjava.net/envoydada/archive/2010/06/23/324266.html'>阅读全文</a><img src ="http://www.blogjava.net/envoydada/aggbug/324266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-06-23 15:40 <a href="http://www.blogjava.net/envoydada/archive/2010/06/23/324266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mongodb Dynamic querys select</title><link>http://www.blogjava.net/envoydada/archive/2010/06/23/324255.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Wed, 23 Jun 2010 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/06/23/324255.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/324255.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/06/23/324255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/324255.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/324255.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find()<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;name&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;INOT&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;(`name`,&nbsp;`age`)&nbsp;</span><span style="color: #0000FF; ">values</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">25</span><span style="color: #000000; ">)<br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">insert</span><span style="color: #000000; ">({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">25</span><span style="color: #000000; ">})<br />
<br />
<br />
</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;you&nbsp;want&nbsp;</span><span style="color: #0000FF; ">add</span><span style="color: #000000; ">&nbsp;a&nbsp;&nbsp;</span><span style="color: #0000FF; ">column</span><span style="color: #000000; ">&nbsp;`email`&nbsp;</span><span style="color: #0000FF; ">on</span><span style="color: #000000; ">&nbsp;MySQL,you&nbsp;must&nbsp;:<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">ALTER</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&#8230;.<br />
But&nbsp;</span><span style="color: #808080; ">in</span><span style="color: #000000; ">&nbsp;Mongo,you&nbsp;can&nbsp;just:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">insert</span><span style="color: #000000; ">({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">25</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">email</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foo@bar.com</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">DELETE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.remove({})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">DELETE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;age&nbsp;</span><span style="color: #808080; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">30</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.remove({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;{$lt&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">30</span><span style="color: #000000; ">}})<br />
<br />
$gt&nbsp;:&nbsp;</span><span style="color: #808080; ">&gt;</span><span style="color: #000000; ">&nbsp;;&nbsp;$gte&nbsp;:&nbsp;</span><span style="color: #808080; ">&gt;=</span><span style="color: #000000; ">&nbsp;;&nbsp;$lt&nbsp;:&nbsp;</span><span style="color: #808080; ">&lt;</span><span style="color: #000000; ">&nbsp;;&nbsp;$lte&nbsp;:&nbsp;</span><span style="color: #808080; ">&lt;=</span><span style="color: #000000; ">&nbsp;;&nbsp;$ne&nbsp;:&nbsp;</span><span style="color: #808080; ">!=</span><span style="color: #000000; "><br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">UPDATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">SET</span><span style="color: #000000; ">&nbsp;`age`&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">36</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;`name`&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">update</span><span style="color: #000000; ">({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">},&nbsp;{$</span><span style="color: #0000FF; ">set</span><span style="color: #000000; ">&nbsp;:&nbsp;{</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">36</span><span style="color: #000000; ">}})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">UPDATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">SET</span><span style="color: #000000; ">&nbsp;`age`&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;`age`&nbsp;</span><span style="color: #808080; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">3</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;`name`&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">update</span><span style="color: #000000; ">({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">},&nbsp;{$inc&nbsp;:&nbsp;{</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">3</span><span style="color: #000000; ">}})<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;See&nbsp;more&nbsp;@&nbsp;http:</span><span style="color: #808080; ">//</span><span style="color: #000000; ">www.mongodb.org</span><span style="color: #808080; ">/</span><span style="color: #000000; ">display</span><span style="color: #808080; ">/</span><span style="color: #000000; ">DOCS</span><span style="color: #808080; ">/</span><span style="color: #000000; ">Updating<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">COUNT</span><span style="color: #000000; ">(</span><span style="color: #808080; ">*</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;`name`&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">}).</span><span style="color: #FF00FF; ">count</span><span style="color: #000000; ">() 或 db.user.count({name:'foobar'});<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;limit&nbsp;</span><span style="color: #800000; font-weight: bold; ">10</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find().skip(</span><span style="color: #800000; font-weight: bold; ">10</span><span style="color: #000000; ">).limit(</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; ">)<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;`age`&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #800000; font-weight: bold; ">25</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #800000; font-weight: bold; ">35</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">45</span><span style="color: #000000; ">)<br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;{$</span><span style="color: #808080; ">in</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">25,&nbsp;35,&nbsp;45</span><span style="color: #FF0000; ">]</span><span style="color: #000000; ">}})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">ORDER</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">BY</span><span style="color: #000000; ">&nbsp;age&nbsp;</span><span style="color: #0000FF; ">DESC</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find().sort({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #808080; ">-</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">DISTINCT</span><span style="color: #000000; ">(name)&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;age&nbsp;</span><span style="color: #808080; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">distinct</span><span style="color: #000000; ">(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,&nbsp;{</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">:&nbsp;{$lt&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; ">}})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;name,&nbsp;</span><span style="color: #FF00FF; ">sum</span><span style="color: #000000; ">(marks)&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">GROUP</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">BY</span><span style="color: #000000; ">&nbsp;name<br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">group</span><span style="color: #000000; ">({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">key</span><span style="color: #000000; ">&nbsp;:&nbsp;{</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;true},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cond:&nbsp;{</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foo</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reduce:&nbsp;</span><span style="color: #0000FF; ">function</span><span style="color: #000000; ">(obj,prev)&nbsp;{&nbsp;prev.msum&nbsp;</span><span style="color: #808080; ">+=</span><span style="color: #000000; ">&nbsp;obj.marks;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initial:&nbsp;{msum&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">0</span><span style="color: #000000; ">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;name&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;age&nbsp;</span><span style="color: #808080; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">this.age&nbsp;&lt;&nbsp;20</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,&nbsp;{name&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">})</span></div>
<img src ="http://www.blogjava.net/envoydada/aggbug/324255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-06-23 14:13 <a href="http://www.blogjava.net/envoydada/archive/2010/06/23/324255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql常用的hint</title><link>http://www.blogjava.net/envoydada/archive/2010/04/08/317718.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Thu, 08 Apr 2010 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/04/08/317718.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/317718.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/04/08/317718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/317718.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/317718.html</trackback:ping><description><![CDATA[<p>mysql常用的hint</p>
<p>对于经常使用oracle的朋友可能知道，oracle的hint功能种类很多，对于优化sql语句提供了很多方法。同样，在mysql里，也有类似的hint功能。下面介绍一些常用的。</p>
<p>强制索引 <strong>FORCE INDEX</strong></p>
<p>SELECT * FROM TABLE1 FORCE INDEX (FIELD1) &#8230;</p>
<p>以上的SQL语句只使用建立在FIELD1上的索引，而不使用其它字段上的索引。</p>
<p>忽略索引 <strong>IGNORE INDEX</strong></p>
<p>SELECT * FROM TABLE1 IGNORE INDEX (FIELD1, FIELD2) &#8230;</p>
<p>在上面的SQL语句中，TABLE1表中FIELD1和FIELD2上的索引不被使用。</p>
<p>关闭查询缓冲 <strong>SQL_NO_CACHE</strong></p>
<p>SELECT SQL_NO_CACHE field1, field2 FROM TABLE1;</p>
<p>有一些SQL语句需要实时地查询数据，或者并不经常使用（可能一天就执行一两次）,这样就需要把缓冲关了,不管这条SQL语句是否被执行过，服务器都不会在缓冲区中查找，每次都会执行它。</p>
<p>强制查询缓冲 <strong>SQL_CACHE</strong></p>
<p>SELECT SQL_CALHE * FROM TABLE1;</p>
<p>如果在my.ini中的query_cache_type设成2，这样只有在使用了SQL_CACHE后，才使用查询缓冲。</p>
<p>优先操作 <strong>HIGH_PRIORITY</strong></p>
<p>HIGH_PRIORITY可以使用在select和insert操作中，让MYSQL知道，这个操作优先进行。</p>
<p>SELECT HIGH_PRIORITY * FROM TABLE1;</p>
<p>滞后操作 <strong>LOW_PRIORITY</strong></p>
<p>LOW_PRIORITY可以使用在insert和update操作中，让mysql知道，这个操作滞后。</p>
<p>update LOW_PRIORITY table1 set field1= where field1= &#8230;</p>
<p>延时插入 <strong>INSERT DELAYED</strong></p>
<p>INSERT DELAYED INTO table1 set field1= &#8230;</p>
<p>INSERT DELAYED INTO，是客户端提交数据给MySQL，MySQL返回OK状态给客户端。而这是并不是已经将数据插入表，而是存储在内存里面等待排队。当mysql有空余时，再插入。另一个重要的好处是，来自许多客户端的插入被集中在一起，并被编写入一个块。这比执行许多独立的插入要快很多。坏处是，不能返回自动递增的ID，以及系统崩溃时，MySQL还没有来得及插入数据的话，这些数据将会丢失。</p>
<p>强制连接顺序 <strong>STRAIGHT_JOIN</strong></p>
<p>SELECT TABLE1.FIELD1, TABLE2.FIELD2 FROM TABLE1 STRAIGHT_JOIN TABLE2 WHERE &#8230;</p>
<p>由上面的SQL语句可知，通过STRAIGHT_JOIN强迫MySQL按TABLE1、TABLE2的顺序连接表。如果你认为按自己的顺序比MySQL推荐的顺序进行连接的效率高的话，就可以通过STRAIGHT_JOIN来确定连接顺序。</p>
<p>强制使用临时表 <strong>SQL_BUFFER_RESULT</strong></p>
<p>SELECT SQL_BUFFER_RESULT * FROM TABLE1 WHERE &#8230;</p>
<p>当我们查询的结果集中的数据比较多时，可以通过SQL_BUFFER_RESULT.选项强制将结果集放到临时表中，这样就可以很快地释放MySQL的表锁（这样其它的SQL语句就可以对这些记录进行查询了），并且可以长时间地为客户端提供大记录集。</p>
<p>分组使用临时表 <strong>SQL_BIG_RESULT</strong>和<strong>SQL_SMALL_RESULT</strong></p>
<p>SELECT SQL_BUFFER_RESULT FIELD1, COUNT(*) FROM TABLE1 GROUP BY FIELD1;</p>
<p>一般用于分组或DISTINCT关键字，这个选项通知MySQL，如果有必要，就将查询结果放到临时表中，甚至在临时表中进行排序。SQL_SMALL_RESULT比起SQL_BIG_RESULT差不多，很少使用。</p>
 <img src ="http://www.blogjava.net/envoydada/aggbug/317718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-04-08 14:24 <a href="http://www.blogjava.net/envoydada/archive/2010/04/08/317718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql innodb引擎优化</title><link>http://www.blogjava.net/envoydada/archive/2010/04/08/317716.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Thu, 08 Apr 2010 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/04/08/317716.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/317716.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/04/08/317716.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/317716.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/317716.html</trackback:ping><description><![CDATA[&nbsp;
<p><strong><span style="font-size: 8pt; color: black; font-family: 宋体"><span style="font-size: 10pt"><span style="color: #000000">介绍：</span></span></span></strong><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">给</span><span style="font-size: 8pt; color: black; font-family: Verdana">MySQL</span><span style="font-size: 8pt; color: black">提供了具有提交，回滚和崩溃恢复能力的事务安全（</span><span style="font-size: 8pt; color: black; font-family: Verdana">ACID</span><span style="font-size: 8pt; color: black">兼容）存储引擎。</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">锁定在行级并且也在</span><span style="font-size: 8pt; color: black; font-family: Verdana">SELECT</span><span style="font-size: 8pt; color: black">语句提供一个</span><span style="font-size: 8pt; color: black; font-family: Verdana">Oracle</span><span style="font-size: 8pt; color: black">风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">中扩大锁定的需要，因为在</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">中行级锁定适合非常小的空间。</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">也支持</span><span style="font-size: 8pt; color: black; font-family: Verdana">FOREIGN KEY</span><span style="font-size: 8pt; color: black">强制。在</span><span style="font-size: 8pt; color: black; font-family: Verdana">SQL</span><span style="font-size: 8pt; color: black">查询中，你可以自由地将</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">类型的表与其它</span><span style="font-size: 8pt; color: black; font-family: Verdana">MySQL</span><span style="font-size: 8pt; color: black">的表的类型混合起来，甚至在同一个查询中也可以混合。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　</span><span style="font-size: 8pt; color: black; font-family: Verdana">Innodb </span><span style="font-size: 8pt; color: black">的创始人：</span></span></span></span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black; font-family: Verdana">Heikki Tuuri<br />
</span><span style="font-size: 8pt; color: black">　</span><span style="font-size: 8pt; color: black; font-family: Verdana">Heikki Tuuri</span><span style="font-size: 8pt; color: black">在Ｉｎｎｏｄｂ的Ｂｕｇ社区里也是很活跃的，如果遇到Ｂｕｇ也可以直接提到社区，得到作者的解答。</span></span></span></span></p>
<p><strong><span style="font-size: 8pt; color: black; font-family: 宋体"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">为什么要学习Ｉｎｎｏｄｂ的调优：</span></span></span></span></strong><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　目前来说：</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">是为</span><span style="font-size: 8pt; color: black; font-family: Verdana">Mysql</span><span style="font-size: 8pt; color: black">处理巨大数据量时的最大性能设计。它的</span><span style="font-size: 8pt; color: black; font-family: Verdana">CPU</span><span style="font-size: 8pt; color: black">效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中</span><span style="font-size: 8pt; color: black; font-family: Verdana">Innodb</span><span style="font-size: 8pt; color: black">是倍受青睐的。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　另一方面，在数据库的复制操作中</span><span style="font-size: 8pt; color: black; font-family: Verdana">Innodb</span><span style="font-size: 8pt; color: black">也是能保证</span><span style="font-size: 8pt; color: black; font-family: Verdana">master</span><span style="font-size: 8pt; color: black">和</span><span style="font-size: 8pt; color: black; font-family: Verdana">slave</span><span style="font-size: 8pt; color: black">数据一致有一定的作用。</span></span></span></span></p>
<p><strong><span style="font-size: 8pt; color: black; font-family: 宋体"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">参数调优内容：</span></span></span></span></strong><strong><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span></strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　</span><span style="font-size: 8pt; color: black; font-family: Verdana">1. </span><span style="font-size: 8pt; color: black">内存利用方面</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　</span><span style="font-size: 8pt; color: black; font-family: Verdana">2. </span><span style="font-size: 8pt; color: black">日值控制方面</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　</span><span style="font-size: 8pt; color: black; font-family: Verdana">3.</span><span style="font-size: 8pt; color: black">　文件</span><span style="font-size: 8pt; color: black; font-family: Verdana">IO</span><span style="font-size: 8pt; color: black">分配，空间占用方面</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　</span><span style="font-size: 8pt; color: black; font-family: Verdana">4. </span><span style="font-size: 8pt; color: black">其它相关参数</span></span></span></span></p>
<p><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-size: 8pt; color: black; font-family: 宋体">１</span></strong><strong><span style="font-size: 8pt; color: black; font-family: Verdana">.</span></strong><strong><span style="font-size: 8pt; color: black; font-family: 宋体">内存利用方面：</span></strong></span></span></span><strong><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span></strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">首先介绍一个</span><span style="font-size: 8pt; color: black; font-family: Verdana">Innodb</span><span style="font-size: 8pt; color: black">最重要的参数：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-family: Verdana">innodb_buffer_pool_size</span></strong><br />
</span></span></span></span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　这个参数和</span><span style="font-size: 8pt; color: black; font-family: Verdana">MyISAM</span><span style="font-size: 8pt; color: black">的</span><span style="font-size: 8pt; color: black; font-family: Verdana">key_buffer_size</span><span style="font-size: 8pt; color: black">有相似之处，但也是有差别的。这个参数主要缓存</span><span style="font-size: 8pt; color: black; font-family: Verdana">innodb</span><span style="font-size: 8pt; color: black">表的索引，数据，插入数据时的缓冲。为</span><span style="font-size: 8pt; color: black; font-family: Verdana">Innodb</span><span style="font-size: 8pt; color: black">加速优化首要参数。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　该参数分配内存的原则：这个参数默认分配只有</span><span style="font-size: 8pt; color: black; font-family: Verdana">8M</span><span style="font-size: 8pt; color: black">，可以说是非常小的一个值。如果是一个专用ＤＢ服务器，那么他可以占到内存的</span><span style="font-size: 8pt; color: black; font-family: Verdana">70%-80%</span><span style="font-size: 8pt; color: black">。这个参数不能动态更改，所以分配需多考虑。分配过大，会使</span><span style="font-size: 8pt; color: black; font-family: Verdana">Swap</span><span style="font-size: 8pt; color: black">占用过多，致使</span><span style="font-size: 8pt; color: black; font-family: Verdana">Mysql</span><span style="font-size: 8pt; color: black">的查询特慢。如果你的数据比较小，那么可分配是你的数据大小＋１０％左右做为这个参数的值。例如：数据大小为５０Ｍ</span><span style="font-size: 8pt; color: black; font-family: Verdana">,</span><span style="font-size: 8pt; color: black">那么给这个值分配</span><span style="font-size: 8pt; color: black; font-family: Verdana">innodb_buffer_pool_size</span><span style="font-size: 8pt; color: black">＝６４Ｍ</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-family: Verdana">innodb_buffer_pool_size=4G</span></strong><br />
</span></span></span></span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">这个参数分配值的使用情况可以根据</span><strong><span style="font-size: 8pt; color: black; font-family: Verdana">show innodb status"G;</span></strong><span style="font-size: 8pt; color: black">中的</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<strong><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">----------------------</span></span></span></span></strong><strong><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-family: Verdana">BUFFER POOL AND MEMORY</span></strong><br />
<strong><span style="font-family: Verdana">----------------------</span></strong><br />
<strong><span style="font-family: Verdana">Total memory allocated 4668764894;</span></strong></span></span></span></strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"> <br />
</span></span></span></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">去确认使用情况。</span></span></span></span></p>
<p><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">第二个：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<strong><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_additional_mem_pool</span></span></span></span></strong></span><strong><span style="font-size: 8pt; color: black; font-family: 宋体"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">：</span></span></span></span></strong><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">作用：用来存放</span><span style="font-size: 8pt; color: black; font-family: Verdana">Innodb</span><span style="font-size: 8pt; color: black">的内部目录</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">这个值不用分配太大，系统可以自动调。不用设置太高。通常比较大数据设置</span><span style="font-size: 8pt; color: black; font-family: Verdana">16</span><span style="font-size: 8pt; color: black">Ｍ够用了，如果表比较多，可以适当的增大。如果这个值自动增加，会在</span><span style="font-size: 8pt; color: black; font-family: Verdana">error log</span><span style="font-size: 8pt; color: black">有中显示的。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">分配原则：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">用</span><strong><span style="font-size: 8pt; color: black; font-family: Verdana">show innodb status"G;</span></strong><span style="font-size: 8pt; color: black">去查看运行中的ＤＢ是什么状态（参考</span><span style="font-size: 8pt; color: black; font-family: Verdana">BUFFER POOL AND MEMORY</span><span style="font-size: 8pt; color: black">段中），然后可以调整到适当的值。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">----------------------<br />
BUFFER POOL AND MEMORY<br />
----------------------<br />
Total memory allocated 4668764894; in additional pool allocated 16777216<br />
</span></span></span></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">参考：</span></span></span></span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black; font-family: Verdana">in additional pool allocated 16777216<br />
</span><span style="font-size: 8pt; color: black">根据你的参数情况，可以适当的调整。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-family: Verdana">innodb_additional_mem_pool=16M</span></strong> </span></span></span></span></p>
<p><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">２</span><span style="font-size: 8pt; color: black; font-family: Verdana">.</span><span style="font-size: 8pt; color: black">关于日值方面：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-family: Verdana">innodb_log_file_size</span></strong><br />
</span></span></span></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">作用：指定日值的大小</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">分配原则：几个日值成员大小加起来差不多和你的</span><span style="font-size: 8pt; color: black; font-family: Verdana">innodb_buffer_pool_size</span><span style="font-size: 8pt; color: black">相等。上限为每个日值上限大小为</span><span style="font-size: 8pt; color: black; font-family: Verdana">4G</span><span style="font-size: 8pt; color: black; font-family: Verdana">.</span><span style="font-size: 8pt; color: black">一般控制在几个ＬＯＧ文件相加大小在２Ｇ以内为佳。具体情况还需要看你的事务大小，数据大小为依据。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">说明：这个值分配的大小和数据库的写入速度，事务大小，异常重启后的恢复有很大的关系。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-family: Verdana">innodb_log_file_size=256M</span></strong> </span></span></span></span></p>
<p><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-family: Verdana"><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_log_files_in_group<br />
</span></span></span></strong></span></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">作用：指定你有几个日值组。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">分配原则：　一般我们可以用２－３个日值组。默认为两个。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_log_files_in_group=3</span> </span></span></span></span></p>
<p><span><br />
<strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana"><span style="font-size: 12pt"><span style="font-family: Verdana">innodb_log_buffer_size</span>：</span></span><br />
</span></span></span></strong></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="color: black">作用：事务在内存中的缓冲。</span><br />
分配原则：控制在<span style="color: black; font-family: Verdana">2-8M.</span>这个值不用太多的。他里面的内存一般一秒钟写到磁盘一次。具体写入方式和你的事务提交方式有关。在Ｏｒａｃｌｅ等数据库了解这个，一般最大指定为３Ｍ比较合适。<br />
参考：<span style="color: black; font-family: Verdana">Innodb_os_log_written(show global status </span>可以拿到)<br />
如果这个值增长过快，可以适当的增加innodb_log_buffer_size<br />
另外如果你需要处理大理的ＴＥＸＴ，或是ＢＬＯＢ字段，可以考虑增加这个参数的值。<br />
<span style="color: black">设置方法：</span></span></span></span><span style="color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_log_buffer_size=3M</span> </span></span></span></span></span></span></p>
<p><span><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 10pt"><strong>innodb_flush_logs_at_trx_commit</strong></span><br />
</span></span></span></strong></span><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span>作用：控制事务的提交方式<br />
</span><span style="font-size: 8pt; color: black">分配原则：这个参数只有３个值，０，１，２请确认一下自已能接受的级别。默认为１，主库请不要更改了。</span></span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">性能更高的可以设置为０或是２，但会丢失一秒钟的事务。</span></span></span></span></span><span><br />
<span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">说明：</span></span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">这个参数的设置对Ｉｎｎｏｄｂ的性能有很大的影响，所以在这里给多说明一下。</span></span></span></span></span><span><br />
<span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">当这个值为</span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black; font-family: Verdana">1</span><span style="font-size: 8pt; color: black">时：</span><span style="font-size: 8pt; color: black; font-family: Verdana">innodb </span><span style="font-size: 8pt; color: black">的事务</span><span style="font-size: 8pt; color: black; font-family: Verdana">LOG</span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span>在每次提交后写入日值文件，并对日值做刷新到磁盘。这个可以做到不丢任何一个事务。<br />
当这个值为</span><span style="font-size: 8pt; color: black; font-family: Verdana">2</span><span style="font-size: 8pt; color: black">时：在每个提交，日志缓冲被写到文件，但不对日志文件做到磁盘操作的刷新</span><span style="font-size: 8pt; color: black; font-family: Verdana">,</span><span style="font-size: 8pt; color: black">在对日志文件的刷新在值为</span><span style="font-size: 8pt; color: black; font-family: Verdana">2</span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span>的情况也每秒发生一次。但需要注意的是，由于进程调用方面的问题，并不能保证每秒１００％的发生。从而在性能上是最快的。但操作系统崩溃或掉电才会删除最后一秒的事务。<br />
当这个值为</span><span style="font-size: 8pt; color: black; font-family: Verdana">0</span><span style="font-size: 8pt; color: black">时：日志缓冲每秒一次地被写到日志文件，并且对日志文件做到磁盘操作的刷新，但是在一个事务提交不做任何操作。</span><span style="font-size: 8pt; color: black; font-family: Verdana">mysqld</span><span style="font-size: 8pt; color: black">进程的崩溃会删除崩溃前最后一秒的事务。</span></span></span></span></span></p>
<p><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">从以上分析，当这个值不为１时，可以取得较好的性能，但遇到异常会有损失，所以需要根据自已的情况去衡量。</span></span></span></span></span></p>
<p><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_flush_logs_at_trx_commit=1</span> </span></span></span></strong></span></p>
<p><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black; font-family: Verdana">3.</span><span style="font-size: 8pt; color: black">　文件</span><span style="font-size: 8pt; color: black; font-family: Verdana">IO</span><span style="font-size: 8pt; color: black">分配，空间占用方面</span></span></span></span></strong><span><br />
<strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_file_per_table</span><br />
</span></span></span></strong><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">作用：使每个<span style="color: black; font-family: Verdana">Innodb</span>的表，有自已独立的表空间。如删除文件后可以回收那部分空间。<br />
<span style="color: black">分配原则：只有使用不使用。但ＤＢ还需要有一个公共的表空间。</span></span></span></span><span style="color: black; font-family: Verdana"><br />
</span><span style="color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_file_per_table=1</span> </span></span></span></strong></span></p>
<p><span><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_file_io_threads<br />
</span></span></span></strong></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="color: black">作用：文件读写ＩＯ数，这个参数只在</span><span style="color: black; font-family: Verdana">Windows</span><span style="color: black">上起作用。在</span><span style="color: black; font-family: Verdana">LINUX</span>上只会等于４<br />
<span style="color: black">设置方法：</span></span></span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_file_io_threads=4</span> </span></span></span></strong></span></p>
<p><span><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_open_files<br />
</span></span></span></strong></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="color: black">作用：限制</span><span style="color: black; font-family: Verdana">Innodb</span>能打开的表的数据。<br />
<span style="color: black">分配原则：如果库里的表特别多的情况，请增加这个。这个值默认是３００。</span></span></span></span><span style="color: black; font-family: Verdana"><br />
</span><span style="color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-family: Verdana"><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_open_files=800 </span></span></span></strong></span></span><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">请适当的增加</span><span style="font-size: 8pt; color: black; font-family: Verdana">table_cache </span></span></span></span></strong></p>
<p><span><br />
<strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">4. </span>其它相关参数</span></span></span></strong></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">这里说明一个比较重要的参数：</span></span></span></span><span style="color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_flush_method</span><br />
</span></span></span></span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="color: black">作用：Ｉｎｎｏｄｂ和系统打交道的一个ＩＯ模型</span><br />
分配原则：<span style="color: black; font-family: Verdana">Windows</span>不用设置。<br />
Ｕｎｉｘ可以设置：fsync() or O_SYNC/O_DSYNC<br />
如果系统可以禁止系统的Ｃａｃｈｅ那就把他禁了。<br />
Ｌｉｎｕｘ可以选择：O_DIRECT <br />
直接写入磁盘，禁止系统Ｃａｃｈｅ了<br />
<span style="color: black">设置方法：</span></span></span></span><span style="color: black; font-family: Verdana"><br />
</span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana"><strong>innodb_flush_method=O_DIRECT</strong></span> </span></span></span></span></p>
<p><span><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_max_dirty_pages_pct <br />
</span></span></span></strong></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="color: black">作用：控制</span><span style="color: black; font-family: Verdana">Innodb</span><span style="color: black">的脏页在缓冲中在那个百分比之下，值在范围</span><span style="color: black; font-family: Verdana">1-100,</span>默认为90.<br />
这个参数的另一个用处：当Ｉｎｎｏｄｂ的内存分配过大，致使Ｓｗａｐ占用严重时，可以适当的减小调整这个值，使达到Ｓｗａｐ空间释放出来。建义：这个值最大在９０％，最小在１５％。太大，缓存中每次更新需要致换数据页太多，太小，放的数据页太小，更新操作太慢。<br />
<span style="color: black">设置方法：</span></span></span></span><span style="color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_max_dirty_pages_pct</span></span></span></span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">＝90<br />
动态更改需要有Ｓｕｐｅｒ权限：<br />
</span></span></span></span></span><span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong>set global innodb_max_dirty_pages_pct=50;</strong> </span></span></span></span></p>
  <img src ="http://www.blogjava.net/envoydada/aggbug/317716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-04-08 14:15 <a href="http://www.blogjava.net/envoydada/archive/2010/04/08/317716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2SE6 分析工具</title><link>http://www.blogjava.net/envoydada/archive/2010/04/08/317713.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Thu, 08 Apr 2010 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/04/08/317713.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/317713.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/04/08/317713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/317713.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/317713.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp; 除了Dtrace与Java技术的集成之外，Java SE 6发行中还包含了许多其它的可观察性工具。下面总结了这些工具，其中还包含一些更为详细的链接说明。</p>
<p><strong>(一) JConsole</strong></p>
<p>JConsole使用JVM的可扩展性Java管理扩展(JMX)工具来提供关于运行于Java平台的应用程序的性能和资源消耗的信息。</p>
<p>在J2SE 5.0软件中，你需要启动使用-Dcom.sun.management.jmxremote选项监控的应用程序。注意：在Java SE 6软件中，不再有这一要求。当启动该应用程序时，不需要特定的命令行选项。 </p>
<p>在生产系统中的应用</p>
<p>JConsole启动一个在被观察的Java程序的JVM内部的JMX代理。运行另外一部分代码仅有一点极微弱的影响-但是影响很小。</p>
<p>另外，尽管JConsole在监视本地应用程序的开发和快速原型开发中很有用，但在实际的应用系统中不推荐使用。理由是，JConsole本身也消耗大 量的系统资源。我们推荐的方法是用远程监控来把JConsole应用程序与被监控的系统加以隔离。因此,对于应用系统来说,以远程模式使用 JConsole更好些。对于安全的远程监控来说,可以使用安全选项。</p>
<p><strong>(二) jps</strong></p>
<p>jps相当于Solaris进程工具ps。更多的信息，请参考《jps-Java Virtual Machine Process Status Tool》。</p>
<p>不象"pgrep java"或"ps -ef grep java"，jps并不使用应用程序名来查找JVM实例。因此，它查找所有的Java应用程序，包括即使没有使用java执行体的那种（例如，定制的启动 器）。另外，jps仅查找当前用户的Java进程，而不是当前系统中的所有进程。</p>
<p><strong>(三) jstat</strong></p>
<p>jstat 显示一个测量（instrumented）Java HotSpot虚拟机的性能统计信息（请参考《jstat-Java Virtual Machine Statistics Monitoring Tool》）。有关于性能计数器的更详细的信息请参考《Code sample-jvmstat 3.0》。</p>
<p><strong>(四) jstatd</strong></p>
<p>jstatd是一个Java远程方法调用 (RMI)服务器应用程序-它监控测量Java HotSpot虚拟机的创建和终止并且提供一个接口来允许远程监控工具依附到运行于本地主机的JVM（请参考《jstatd-Virtual Machine jstat Daemon》）。</p>
<p>在应用系统中的使用</p>
<p>jps及其它jvmstat实用程序都使用 极为轻量级的观察机制。由JVM分配一小部分共享内存，而性能计数器也是从这部分内存中分配的。JVM子系统基于其感兴趣的事件更新性能计数器。客户端工 具仅仅负责异步地从共享内存段中进行读取。因此，总的来说，使用jvmstat进行监控的效果是很小的。 Photoshop教程 数据结构 五笔输入法专题 <br />
<br />
<br />
<br />
Java SE 6平台中针对于Postmortem的可观察性工具</p>
<p>Java SE 6支持postmortem可观察性工具-它能够从挂起的Java进程或Java核心复制中获得信息。这些工具（除了jhat外）都使用Solaris libproc库来依附到和读取被观察的程序。在观察期间，目标程序被挂起。当Java进程被挂起或当从一个Java进程中发生一个核心复制时，可以使用 这些工具。在任何可能的情况下，请考虑使用gcore来捕获系统的核心复制的一个快照并且使用任何下列工具"离线"分析核心复制。</p>
<p><strong>(一) jinfo</strong></p>
<p>jinfo打印一个给定的Java进程或核心文件或一个远程调试服务器的Java配置信息。配置信息包括Java系统属性和JVM命令行标志(更多信息，请参考《jinfo-Configuration Info》)。</p>
<p><strong>(二) jmap</strong></p>
<p>jmap：如果这个工具不使用任何选项（除了pid或core选项）运行，那么它显示类似于Solaris的pmap工具所输出的信息。这个工具支持针对Java堆可观察性的若干其它选项。</p>
<p>在Java SE 6平台中,新加入了一个-dump选项。这样可以使jmap能够把Java堆信息复制到一个文件中，然后我们可以使用新的jhat命令（见下面一节）来分析它。</p>
<p>jmap -dump选项并不使用Solaris libproc来实现实时处理；而是，它运行当前正运行的JVM中的一小段代码，由此来实现堆复制。既然这种堆复制代码运行于JVM内部，那么其速度是比 较快的。堆复制的效果大致相当于实现一次"完全的GC"（对整个堆的垃圾收集），再加上把该堆的内容写入到文件中。实现堆复制的另外一种可能的思路是使用 gcore来进行核心复制并且运行"jmap -dump"（这与以"离线"方式运行的核心复制形成对照）。</p>
<p><strong>(三) jstack</strong></p>
<p>jstack等价于Solaris的pstack工具。jstack打印所有的Java线程的堆栈跟踪信息（可选地包括本机帧信息），请参考《jstack-堆栈跟踪》。关于锁和死锁的信息也可以被打印，请参考java.util.concurrent locks。</p>
<p><strong>(四) jsadebugd</strong></p>
<p>jsadebugd依附到一个Java进程或核心文件并且担当一个调试服务器的作用。远程客户，例如jstack、jmap和jinfo，都能够通过Java RMI依附到该服务器。</p>
<p><strong>(五) jhat</strong></p>
<p>jhat是一个Java堆复制浏览器。这个工具分析Java堆复制文件（例如，由上面的"jmap -dump"所产生的）。Jhat启动一个允许堆中的对象在web浏览器中进行分析的web服务器。这个工具并不是想用于应用系统中而是用于"离线"分 析。"jhat工具是平台独立的"，其意思是，它可以被用来观察在任何平台上所产生的堆复制。例如，我们有可能在Linux系统上使用jhat来观察一个 在Solaris OS上所产生的堆复制。</p>
<p>把本机的java内存映像导出到heap.dmp中,其中PID为java进程的ID号。<br />
jmap -dump:live,format=b,file=heap.dmp PID</p>
<p>导出后的映像文件可以用jhat来进行分析，-J是向java虚拟机传一个参数，如-mx768m是指定虚拟机可用最大的内存为768M。如果映像文件很大，你要指定一个很大的值，否则在分析过程中就会有OutOfMemeryError的错误。<br />
jhat -J-mx768m -port &lt;端口号:默认为7000&gt; heap.dmp </p>
 <img src ="http://www.blogjava.net/envoydada/aggbug/317713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-04-08 14:04 <a href="http://www.blogjava.net/envoydada/archive/2010/04/08/317713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>liunx下安装Subversion</title><link>http://www.blogjava.net/envoydada/archive/2010/04/08/317711.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Thu, 08 Apr 2010 05:37:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/04/08/317711.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/317711.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/04/08/317711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/317711.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/317711.html</trackback:ping><description><![CDATA[安装Apache：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;#&nbsp;tar&nbsp;&#8211;zvxf&nbsp;httpd</span><span style="color: #000000">-</span><span style="color: #000000">2.2</span><span style="color: #000000">.</span><span style="color: #000000">9</span><span style="color: #000000">.tar.gz<br />
&nbsp;#&nbsp;cd&nbsp;httpd</span><span style="color: #000000">-</span><span style="color: #000000">2.2</span><span style="color: #000000">.</span><span style="color: #000000">9</span><span style="color: #000000"><br />
&nbsp;#&nbsp;.</span><span style="color: #000000">/</span><span style="color: #000000">configure&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">prefix</span><span style="color: #000000">=/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">local</span><span style="color: #000000">/</span><span style="color: #000000">apache2&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">with</span><span style="color: #000000">-</span><span style="color: #000000">apr</span><span style="color: #000000">=/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">local</span><span style="color: #000000">/</span><span style="color: #000000">apr</span><span style="color: #000000">/</span><span style="color: #000000">bin</span><span style="color: #000000">/</span><span style="color: #000000">apr</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">config&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">with</span><span style="color: #000000">-</span><span style="color: #000000">apr</span><span style="color: #000000">-</span><span style="color: #000000">util</span><span style="color: #000000">=/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">local</span><span style="color: #000000">/</span><span style="color: #000000">apr</span><span style="color: #000000">/</span><span style="color: #000000">bin</span><span style="color: #000000">/</span><span style="color: #000000">apu</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">config&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">enable</span><span style="color: #000000">-</span><span style="color: #000000">modules</span><span style="color: #000000">=</span><span style="color: #000000">so&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;DSO模式安装apache&nbsp;（或&nbsp;--enable-so）<br />
&nbsp;&nbsp;<span style="color: #000000">--enable-dav&nbsp;--enable-maintainer-mode&nbsp;--enable-rewrite&nbsp;--enable-ssl<br />
&nbsp;#&nbsp;make<br />
&nbsp;#&nbsp;make&nbsp;install</span></span></div>
<br />
安装Subversion：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;#tar&nbsp;&#8211;zvxf&nbsp;subversion</span><span style="color: #000000">-</span><span style="color: #000000">1.5</span><span style="color: #000000">.</span><span style="color: #000000">1</span><span style="color: #000000">.tar.gz<br />
&nbsp;#cd&nbsp;&nbsp;subversion</span><span style="color: #000000">-</span><span style="color: #000000">1.5</span><span style="color: #000000">.</span><span style="color: #000000">1</span><span style="color: #000000"><br />
&nbsp;#.</span><span style="color: #000000">/</span><span style="color: #000000">configure&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">prefix</span><span style="color: #000000">=/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">local</span><span style="color: #000000">/</span><span style="color: #000000">svn&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">with</span><span style="color: #000000">-</span><span style="color: #000000">apxs</span><span style="color: #000000">=/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">local</span><span style="color: #000000">/</span><span style="color: #000000">apache</span><span style="color: #000000">/</span><span style="color: #000000">bin</span><span style="color: #000000">/</span><span style="color: #000000">apxs&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">with</span><span style="color: #000000">-</span><span style="color: #000000">apr</span><span style="color: #000000">=/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">local</span><span style="color: #000000">/</span><span style="color: #000000">apr</span><span style="color: #000000">/</span><span style="color: #000000">bin</span><span style="color: #000000">/</span><span style="color: #000000">apr</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">config&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">with</span><span style="color: #000000">-</span><span style="color: #000000">apr</span><span style="color: #000000">-</span><span style="color: #000000">util</span><span style="color: #000000">=/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">local</span><span style="color: #000000">/</span><span style="color: #000000">apr</span><span style="color: #000000">/</span><span style="color: #000000">bin</span><span style="color: #000000">/</span><span style="color: #000000">apu</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">config&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">enable</span><span style="color: #000000">-</span><span style="color: #000000">maintainer</span><span style="color: #000000">-</span><span style="color: #000000">mode<br />
&nbsp;#make<br />
&nbsp;#make&nbsp;install</span></div>
<br />
&nbsp;确定一下svn有没有安装成功<br />
&nbsp;#/usr/local/svn/bin/svnserve --version<br />
&nbsp;会看到相关版本信息！<br />
<br />
配置服务器：<br />
&nbsp;(1). 创建一个用户，如：svnroot;<br />
&nbsp;(2). 以svnroot用户登录<br />
&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">$mkdir&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">home</span><span style="color: #000000">/</span><span style="color: #000000">svnroot</span><span style="color: #000000">/</span><span style="color: #000000">repository<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;$cd&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">local</span><span style="color: #000000">/</span><span style="color: #000000">subversion</span><span style="color: #000000">/</span><span style="color: #000000">bin<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;$.</span><span style="color: #000000">/</span><span style="color: #000000">svnadmin&nbsp;create&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">home</span><span style="color: #000000">/</span><span style="color: #000000">svnroot</span><span style="color: #000000">/</span><span style="color: #000000">repository<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;$&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">local</span><span style="color: #000000">/</span><span style="color: #000000">apache2</span><span style="color: #000000">/</span><span style="color: #000000">bin</span><span style="color: #000000">/</span><span style="color: #000000">htpasswd&nbsp;&#8211;c&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">home</span><span style="color: #000000">/</span><span style="color: #000000">svnroot</span><span style="color: #000000">/</span><span style="color: #000000">repository</span><span style="color: #000000">/</span><span style="color: #000000">passwprd.conf&nbsp;username&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">来创建的&nbsp;会再要求输入两次密码</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;$cd&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">home</span><span style="color: #000000">/</span><span style="color: #000000">svnroot</span><span style="color: #000000">/</span><span style="color: #000000">repository</span><span style="color: #000000">/</span><span style="color: #000000">test<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;$ls&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">ll<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
&nbsp; //看看是不是多了些文件，如果是则说明Subversion安装成功了<br />
&nbsp; //这条语句将把路径/home/user/import下找到的文件导入到你创建的Subversion 仓库中去，<br />
&nbsp; //提交后的修订版为1。<br />
&nbsp; $./svn import 你想要导入的文件位置 file:///home/svnroot/repository &#8211;m "注释"<br />
&nbsp; //不让其他人有该目录的权限<br />
&nbsp; $ chmod 700 /home/svnroot/repository<br />
<br />
&nbsp;(3). 修改Apache配置文件<br />
&nbsp; # cd /usr/local/apadche2/bin<br />
&nbsp; # vi /usr/local/apache2/conf/httpd.conf<br />
&nbsp; //在最下面添加<br />
&nbsp; LoadModule dav_svn_module modules/mod_dav_svn.so<br />
&nbsp; LoadModule authz_svn_module modules/mod_authz_svn.so<br />
&nbsp; &lt;Location /svn&gt;<br />
&nbsp; DAV svn<br />
&nbsp; #SVNParentPath /home/svnroot/repository/ //svn父目录<br />
&nbsp; SVNPath /home/svnroot/repository/test //与svn中bin中svnadmin创建应一样 否则会进不到目录<br />
&nbsp; #AuthzSVNAccessFile /home/svnroot/repository/authz.conf //权限配置文件<br />
&nbsp; AuthType Basic //连接类型设置<br />
&nbsp; AuthName "Subversion.zoneyump" //连接框提示<br />
&nbsp; AuthUserFile /home/svnroot/repository/passwprd.conf //用户配置文件<br />
&nbsp; Require valid-user //采用何种认证<br />
&nbsp; &lt;/Location&gt;<br />
&nbsp; //其中authfile是通过"htpasswd来创建的那个密码文件<br />
&nbsp; //"Require valid-user"告诉apache在authfile中所有的用户都可以访问。如果没有它，<br />
&nbsp; //则只能第一个用户可以访问新建库<br />
&nbsp; <br />
&nbsp; 找到以下内容<br />
&nbsp; User daemon<br />
&nbsp; Group daemon<br />
&nbsp; 把上述内容改成:<br />
&nbsp; User svnroot<br />
&nbsp; Group svnroot<br />
&nbsp; <br />
&nbsp; 保存<br />
<br />
&nbsp;(4). 添加svn用户<br />
&nbsp; 创建<br />
&nbsp; $htpasswd -c /home/svnroot/repository/authfile username<br />
&nbsp; 会要求输两次密码<br />
&nbsp; <br />
&nbsp; 在/home/svnroot/repository/conf会生成<br />
&nbsp; authz passwd svnserve.conf<br />
&nbsp; $cd /home/svnroot/repository/conf<br />
&nbsp; $vi authz<br />
&nbsp; 添加如下<br />
&nbsp; [groups] /*这个表示群组设置<br />
&nbsp; Admin=usr1,user2 /*这个表示admin群组里的成员 user1,user2<br />
&nbsp; Develop=u1, u2 /*这个表示Develop群组里的成员 u1,u2<br />
&nbsp; [www:/] /*这表示，仓库www的根目录下的访问权限<br />
&nbsp; user1 = rw /*www仓库user1用户具有读和写权限<br />
&nbsp; user2 = r /* www仓库userl用户具只有读权限<br />
&nbsp; @develop=rw /*这表示 群 develop的成员都具有读写权限<br />
&nbsp; [/] /*这个表示在所有仓库的根目录下<br />
&nbsp; * = r /*这个表示对所有的用户都具有读权限<br />
&nbsp; 注意：在编辑authz文件时，所有行都必须要顶头写，不能有缩行<br />
<br />
&nbsp;(5). 重起Apache<br />
&nbsp; #/usr/local/apache2/bin/apachectl &#8211;k restart<br />
<br />
&nbsp;(6). 启动svn服务<br />
&nbsp; #/usr/local/svn/bin/svnserve -d -r /home/svnroot/repository<br />
&nbsp; -d 表示以 daemon 方式(后台运行)运行<br />
&nbsp; -r /svn/project 指定根目录是/home/svnroot/repository<br />
&nbsp; 检查服务器是否启动正常:<br />
&nbsp; #ps &#8211;ef|grep svnserve<br />
<br />
&nbsp;(7). 后序工作<br />
&nbsp; 在/etc/profile的结尾设置一些svn启动时要做的工作 <br />
&nbsp; # start apache server for svn <br />
&nbsp; /usr/sbin/apachectl start <br />
&nbsp; export SVN_EDITOR=vi 
 <img src ="http://www.blogjava.net/envoydada/aggbug/317711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-04-08 13:37 <a href="http://www.blogjava.net/envoydada/archive/2010/04/08/317711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE 中dbms_stats的使用</title><link>http://www.blogjava.net/envoydada/archive/2009/02/07/253698.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Sat, 07 Feb 2009 07:11:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2009/02/07/253698.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/253698.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2009/02/07/253698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/253698.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/253698.html</trackback:ping><description><![CDATA[dbms_stats能良好地估计统计数据（尤其是针对较大的分区表），并能获得更好的统计结果，最终制定出速度更快的SQL执行计划。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;dbms_stats.gather_schema_stats(<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ownname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">SCOTT</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />options&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">GATHER&nbsp;AUTO</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />estimate_percent&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;dbms_stats.auto_sample_size,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />method_opt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">for&nbsp;all&nbsp;columns&nbsp;size&nbsp;repeat</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />degree&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">15</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />)</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了充分认识dbms_stats的好处，需要仔细体会每一条主要的预编译指令（directive）。下面让我们研究每一条指令，并体会如何用它为基于代价的SQL优化器收集最高质量的统计数据。<br />
<strong style="color: red">options参数<br />
</strong>
<p>使用4个预设的方法之一，这个选项能控制Oracle统计的刷新方式：</p>
<p><span style="color: #0000ff">gather</span>——重新分析整个架构（Schema）。 <br />
<span style="color: #0000ff">gather empty</span>——只分析目前还没有统计的表。 <br />
<span style="color: #0000ff">gather stale</span>——只重新分析修改量超过10%的表（这些修改包括插入、更新和删除）。 <br />
<span style="color: #0000ff">gather auto</span>——重新分析当前没有统计的对象，以及统计数据过期（变脏）的对象。注意，使用gather auto类似于组合使用gather stale和gather empty。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意，无论gather stale还是gather auto，都要求进行监视。如果你执行一个alter table xxx monitoring命令，Oracle会用dba_tab_modifications视图来跟踪发生变动的表。这样一来，你就确切地知道，自从上一次分析统计数据以来，发生了多少次插入、更新和删除操作。</p>
<strong style="color: #ff0000">estimate_percent选项<br />
</strong>
<p>estimate_percent参数是一种比较新的设计，它允许Oracle的dbms_stats在收集统计数据时，自动估计要采样的一个segment的最佳百分比：<br />
estimate_percent =&gt; dbms_stats.auto_sample_size</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要验证自动统计采样的准确性，你可检视dba_tables sample_size列。一个有趣的地方是，在使用自动采样时，Oracle会为一个样本尺寸选择5到20的百分比。记住，统计数据质量越好，CBO做出的决定越好。<br />
<br />
<strong>method_opt选项<br />
</strong>method_opt：<span style="color: #0000ff">for table </span>--只统计表　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff">for all indexed columns </span>--只统计有索引的表列&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff">for all indexes </span>--只分析统计相关索引&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff">for all columns</span></p>
<p>dbms_stats的method_opt参数尤其适合在表和索引数据发生变化时刷新统计数据。method_opt参数也适合用于判断哪些列需要直方图（histograms）。<br />
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 某些情况下，索引内的各个值的分布会影响CBO是使用一个索引还是执行一次全表扫描的决策。例如，假如在where子句中指定的值的数量不对称，全表扫描就显得比索引访问更经济。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果你有一个高度倾斜的索引（某些值的行数不对称），就可创建Oracle直方图统计。但在现实世界中，出现这种情况的机率相当小。使用CBO时，最常见的错误之一就是在CBO统计中不必要地引入直方图。根据经验，只有在列值要求必须修改执行计划时，才应使用直方图。</p>
<p>为了智能地生成直方图，Oracle为dbms_stats准备了method_opt参数。在method_opt子句中，还有一些重要的新选项，包括skewonly，repeat和auto：<br />
<span style="color: #0000ff">method_opt=&gt;'for all columns size skewonly'<br />
method_opt=&gt;'for all columns size repeat'<br />
method_opt=&gt;'for all columns size auto'</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; skewonly选项会耗费大量处理时间，因为它要检查每个索引中的每个列的值的分布情况。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 假如dbms_stat发现一个索引的各个列分布得不均匀，就会为那个索引创建直方图，帮助基于代价的SQL优化器决定是进行索引访问，还是进行全表扫描访问。例如，在一个索引中，假定有一个列在50%的行中，如清单B所示，那么为了检索这些行，全表扫描的速度会快于索引扫描。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #008080">--</span><span style="color: #008080">*************************************************************</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--</span><span style="color: #008080">&nbsp;SKEWONLY&nbsp;option—Detailed&nbsp;analysis</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--</span><span style="color: #008080">&nbsp;Use&nbsp;this&nbsp;method&nbsp;for&nbsp;a&nbsp;first-time&nbsp;analysis&nbsp;for&nbsp;skewed&nbsp;indexes</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--</span><span style="color: #008080">&nbsp;This&nbsp;runs&nbsp;a&nbsp;long&nbsp;time&nbsp;because&nbsp;all&nbsp;indexes&nbsp;are&nbsp;examined</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--</span><span style="color: #008080">*************************************************************</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;dbms_stats.gather_schema_stats(<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ownname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">SCOTT</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;estimate_percent&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;dbms_stats.auto_sample_size,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method_opt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">for&nbsp;all&nbsp;columns&nbsp;size&nbsp;skewonly</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;degree&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">7</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">end</span><span style="color: #000000">;</span></div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重新分析统计数据时，使用repeat选项，重新分析任务所消耗的资源就会少一些。使用repeat选项（清单C）时，只会为现有的直方图重新分析索引，不再搜索其他直方图机会。定期重新分析统计数据时，你应该采取这种方式。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #008080">--</span><span style="color: #008080">**************************************************************</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--</span><span style="color: #008080">&nbsp;REPEAT&nbsp;OPTION&nbsp;-&nbsp;Only&nbsp;reanalyze&nbsp;histograms&nbsp;for&nbsp;indexes</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--</span><span style="color: #008080">&nbsp;that&nbsp;have&nbsp;histograms</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--</span><span style="color: #008080">&nbsp;Following&nbsp;the&nbsp;initial&nbsp;analysis,&nbsp;the&nbsp;weekly&nbsp;analysis</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--</span><span style="color: #008080">&nbsp;job&nbsp;will&nbsp;use&nbsp;the&nbsp;&#8220;repeat&#8221;&nbsp;option.&nbsp;The&nbsp;repeat&nbsp;option</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--</span><span style="color: #008080">&nbsp;tells&nbsp;dbms_stats&nbsp;that&nbsp;no&nbsp;indexes&nbsp;have&nbsp;changed,&nbsp;and</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--</span><span style="color: #008080">&nbsp;it&nbsp;will&nbsp;only&nbsp;reanalyze&nbsp;histograms&nbsp;for</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--</span><span style="color: #008080">&nbsp;indexes&nbsp;that&nbsp;have&nbsp;histograms.</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />--</span><span style="color: #008080">**************************************************************</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;dbms_stats.gather_schema_stats(<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ownname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">SCOTT</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;estimate_percent&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;dbms_stats.auto_sample_size,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method_opt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">for&nbsp;all&nbsp;columns&nbsp;size&nbsp;repeat</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;degree&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">7</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">end</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用alter table xxx monitoring;命令来实现Oracle表监视时，需要使用dbms_stats中的auto选项。如清单D所示，auto选项根据数据分布以及应用程序访问列的方式（例如通过监视而确定的一个列的工作量）来创建直方图。使用method_opt=&gt;&#8217;auto&#8217;类似于在dbms_stats的option参数中使用gather auto。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;dbms_stats.gather_schema_stats(<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ownname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">SCOTT</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;estimate_percent&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;dbms_stats.auto_sample_size,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method_opt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">for&nbsp;all&nbsp;columns&nbsp;size&nbsp;auto</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;degree&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">7</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">end</span><span style="color: #000000">;</span></div>
<p><strong style="color: red"><br />
并行统计收集degree参数</strong><br />
Oracle推荐设置DBMS_STATS的DEGREE参数为DBMS_STATS.AUTO_DEGREE，该参数允许Oracle根据对象的大小和并行性初始化参数的设置选择恰当的并行度。<br />
聚簇索引，域索引，位图连接索引不能并行收集。<br />
<br />
&nbsp;</p>
<p style="color: #000000"><strong style="color: #ff0000">如何使用dbms_stats分析统计信息？</strong><br />
--创建统计信息历史保留表 <br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">sql</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;dbms_stats.create_stat_table(ownname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">scott</span><span style="color: #ff0000">'</span><span style="color: #000000">,stattab&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">stat_table</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;;&nbsp;</span></div>
<p style="color: #000000"><br />
--导出整个scheme的统计信息 <br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">sql</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;dbms_stats.export_schema_stats(ownname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">scott</span><span style="color: #ff0000">'</span><span style="color: #000000">,stattab&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">stat_table</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;;&nbsp;</span></div>
<p style="color: #000000"><br />
--分析scheme<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">Exec</span><span style="color: #000000">&nbsp;dbms_stats.gather_schema_stats(&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ownname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">scott</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />options&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">GATHER&nbsp;AUTO</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />estimate_percent&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;dbms_stats.auto_sample_size,&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />method_opt&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">for&nbsp;all&nbsp;indexed&nbsp;columns&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />degree&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">6</span><span style="color: #000000">&nbsp;)&nbsp;</span></div>
<p style="color: #000000"><br />
--分析表<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">sql</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;dbms_stats.gather_table_stats(ownname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">scott</span><span style="color: #ff0000">'</span><span style="color: #000000">,tabname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">work_list</span><span style="color: #ff0000">'</span><span style="color: #000000">,estimate_percent&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">,method_opt</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">for&nbsp;all&nbsp;indexed&nbsp;columns</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;;&nbsp;</span></div>
<p style="color: #000000"><br />
--分析索引<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">SQL</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;dbms_stats.gather_index_stats(ownname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">crm2</span><span style="color: #ff0000">'</span><span style="color: #000000">,indname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">IDX_ADM_PERMISSION_PID_MID</span><span style="color: #ff0000">'</span><span style="color: #000000">,estimate_percent&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">10</span><span style="color: #ff0000">'</span><span style="color: #000000">,degree&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">4</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;;</span></div>
<p style="color: #000000"><br />
--如果发现执行计划走错，删除表的统计信息<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">SQL</span><span style="color: #808080">&gt;</span><span style="color: #000000">dbms_stats.delete_table_stats(ownname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">scott</span><span style="color: #ff0000">'</span><span style="color: #000000">,tabname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">work_list</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;;</span></div>
<p style="color: #000000"><br />
--导入表的历史统计信息<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">sql</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;dbms_stats.import_table_stats(ownname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">scott</span><span style="color: #ff0000">'</span><span style="color: #000000">,tabname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">work_list</span><span style="color: #ff0000">'</span><span style="color: #000000">,stattab&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">stat_table</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;;&nbsp;</span></div>
<p style="color: #000000"><br />
--如果进行分析后，大部分表的执行计划都走错，需要导回整个scheme的统计信息<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">sql</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;dbms_stats.import_schema_stats(ownname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">scott</span><span style="color: #ff0000">'</span><span style="color: #000000">,stattab&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">stat_table</span><span style="color: #ff0000">'</span><span style="color: #000000">);</span></div>
<p style="color: #000000"><br />
--导入索引的统计信息<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">SQL</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;dbms_stats.import_index_stats(ownname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">crm2</span><span style="color: #ff0000">'</span><span style="color: #000000">,indname&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">IDX_ADM_PERMISSION_PID_MID</span><span style="color: #ff0000">'</span><span style="color: #000000">,stattab&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">stat_table</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span></div>
<p style="color: #000000"><br />
--检查是否导入成功<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">SQL</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;table_name,num_rows,a.blocks,a.last_analyzed&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;all_tables&nbsp;a&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;a.table_name</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">WORK_LIST</span><span style="color: #ff0000">'</span><span style="color: #000000">;&nbsp;</span></div>
<p style="color: #000000"><br />
分析数据库（包括所有的用户对象和系统对象）：gather_database_stats <br />
分析用户所有的对象（包括表、索引、簇）：gather_schema_stats<br />
分析表：gather_table_stats<br />
分析索引：gather_index_stats <br />
删除数据库统计信息：delete_database_stats<br />
删除用户方案统计信息：delete_schema_stats<br />
删除表统计信息：delete_table_stats<br />
删除索引统计信息：delete_index_stats<br />
删除列统计信息：delete_column_stats <br />
设置表统计信息：set_table_stats<br />
设置索引统计信息：set_index_stats<br />
设置列统计信息：set_column_stats <br />
<br />
</p>
<p style="color: #000000"><br />
</p>
<br />
<p>从Oracle Database 10g开始，Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务，用于自动收集CBO的统计信息。</p>
<p>这个自动任务默认情况下在工作日晚上10：00-6：00和周末全天开启。调用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集统计信息。<br />
该过程首先检测统计信息缺失和陈旧的对象。然后确定优先级，再开始进行统计信息。</p>
<p>可以通过以下查询这个JOB的运行情况：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;Dba_Scheduler_Jobs&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;JOB_NAME&nbsp;</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">GATHER_STATS_JOB</span><span style="color: #ff0000">'</span></div>
<p>其实同在10点运行的Job还有一个AUTO_SPACE_ADVISOR_JOB：</p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">SQL</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;JOB_NAME,LAST_START_DATE&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dba_scheduler_jobs;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />JOB_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LAST_START_DATE<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">----------------------------&nbsp;----------------------------------------</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">AUTO_SPACE_ADVISOR_JOB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #800000">04</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #000000">DEC</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">07</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">10.00</span><span style="color: #000000">.</span><span style="font-weight: bold; color: #800000">00.692269</span><span style="color: #000000">&nbsp;PM&nbsp;</span><span style="color: #808080">+</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">00</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />GATHER_STATS_JOB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #800000">04</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #000000">DEC</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">07</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">10.00</span><span style="color: #000000">.</span><span style="font-weight: bold; color: #800000">00.701152</span><span style="color: #000000">&nbsp;PM&nbsp;</span><span style="color: #808080">+</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">00</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />FGR$AUTOPURGE_JOB<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />PURGE_LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #800000">05</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #000000">DEC</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">07</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">03.00</span><span style="color: #000000">.</span><span style="font-weight: bold; color: #800000">00.169059</span><span style="color: #000000">&nbsp;AM&nbsp;PRC<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
然而这个自动化功能已经影响了很多系统的正常运行，晚上10点对于大部分生产系统也并非空闲时段。<br />
而自动分析可能导致极为严重的闩锁竞争，进而可能导致数据库Hang或者Crash。</p>
<p>所以建议最好关闭这个自动统计信息收集功能</p>
<p>方法之一:<br />
exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');<br />
恢复自动分析:<br />
exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');</p>
<p><br />
方法二：<br />
alter system set "_optimizer_autostats_job"=false scope=spfile;<br />
alter system set "_optimizer_autostats_job"=true scope=spfile;<br />
Pfile可以直接修改初始化参数文件，重新启动数据库。</p>
<br />
<br />
<img src ="http://www.blogjava.net/envoydada/aggbug/253698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2009-02-07 15:11 <a href="http://www.blogjava.net/envoydada/archive/2009/02/07/253698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Memcached 剖析(转)</title><link>http://www.blogjava.net/envoydada/archive/2008/09/28/231708.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Sun, 28 Sep 2008 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2008/09/28/231708.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/231708.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2008/09/28/231708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/231708.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/231708.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.danga.com/memcached/">memcached</a> 是以<a href="http://www.livejournal.com/">LiveJournal</a> 旗下<a href="http://www.danga.com/">Danga Interactive</a> 公司的<a href="http://www.bradfitz.com/">Brad Fitzpatric</a> 为首开发的一款软件。现在已成为 <a href="http://mixi.jp/">mixi</a>、 <a href="http://www.hatena.ne.jp/">hatena</a>、 <a href="http://www.facebook.com/">Facebook</a>、 <a href="http://www.vox.com/">Vox</a>、LiveJournal等众多服务中提高Web应用扩展性的重要因素。</p>
<p>许多Web应用都将数据保存到RDBMS中，应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中，就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。</p>
<p>这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是，通过缓存数据库查询结果，减少数据库访问次数，以提高动态Web应用的速度、提高可扩展性......<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 完整文章下载&nbsp;&nbsp; <a href="/Files/envoydada/memcached.pdf">/Files/envoydada/memcached.pdf</a><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server端下载&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://danga.com/memcached">http://danga.com/memcached</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; <a href="http://jehiah.cz/projects/memcached-win32/">http://jehiah.cz/projects/memcached-win32/</a><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Client端下载&nbsp;&nbsp; <a href="http://www.whalin.com/memcached/">http://www.whalin.com/memcached/</a></p>
(感谢原作者及翻译者的辛勤工作,向你们致敬!!^_^)
<img src ="http://www.blogjava.net/envoydada/aggbug/231708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2008-09-28 17:12 <a href="http://www.blogjava.net/envoydada/archive/2008/09/28/231708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Window下配置SVN服务器与客户端(转)</title><link>http://www.blogjava.net/envoydada/archive/2008/07/29/218323.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Tue, 29 Jul 2008 03:56:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2008/07/29/218323.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/218323.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2008/07/29/218323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/218323.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/218323.html</trackback:ping><description><![CDATA[如何配置svn服务器：前提条件：<br />
下载最新的svn服务器:<br />
<a href="http://files.cnblogs.com/changchangcc520/svn-1.4.5-setup.rar">svn-1.4.5-setup.rar</a><br />
下载最新的svn客户端:<br />
<a href="http://files.cnblogs.com/changchangcc520/TortoiseSVN-1.4.5.10425-win32-svn-1.4.5.rar">TortoiseSVN-1.4.5.10425-win32-svn-1.4.5.rar</a><br />
下载配置svn服务成window service自动运行的工具:<br />
<a href="http://files.cnblogs.com/changchangcc520/SVNService.rar">SVNService.rar</a><br />
步骤:<br />
1.下载并安装svn1.4.5-setup.rar假设你安装在:G:\Program Files\Subversion目录下。<br />
2。建立Repository,可以打开命令窗口，输入svnadmin create G:\SVNRoot\Projects\searchz,目录自己定。<br />
3.配置Repository,进入Repository目录，这里是G:\SVNRoot\Projects\search,你会看到conf目录，进入该目录，你会看到<br />
svnserver.conf和passwd两个文件.<br />
对两个文件作如下修改:<br />
svnserve.conf<a class="postTitle2" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/changchangcc520/archive/2007/11/06/950867.html">Window下配置SVN服务器与客户端</a> <br />
[general]<br />
### These options control access to the repository for unauthenticated<br />
### and authenticated users. Valid values are "write", "read",<br />
### and "none". The sample settings below are the defaults.<br />
anon-access = read<br />
auth-access = write<br />
### The password-db option controls the location of the password<br />
### database file. Unless you specify a path starting with a /,<br />
### the file's location is relative to the conf directory.<br />
### Uncomment the line below to use the default password file.<br />
password-db = passwd<br />
<br />
<br />
含义是: <br />
未验证用户无任何权限 (如果把none修改为read就是给予读权限) <br />
已验证用户给予写权限 (当然也能读) <br />
密码数据存放到passwd文件中 <br />
passwd<br />
[users]<br />
harry = harryssecret<br />
sally = sallyssecret<br />
weip=weip<br />
注意最后passwd中的配置，一个用户以行，如:weip=weip表示用户名为weip，密码为weip的一个用户。 4.启动subversion服务<br />
两种方式启动:<br />
(1).命令方式:svnserve -d -r G:\SVNRoot\Projects默认端口是3690,如果不幸这个端口被别别的程序暂用，可以通过选项 --<br />
listem --port=绑定端口.<br />
(2)subversion服务:默认情况下载window service中视没有的，必须通过svnservice -install -d -r <br />
G:\SVNRoot\Projects，(svnservice必须和svnserve在同一个目录下)<br />
<br />
再用net start svnservice来将其作为服务运行，建议打开控制面板找到SVNService，将其启动类型设置为自动。这样服务器的配置就架构好了。<br />
你现在可以用客户端的TortoiseSVN来访问刚刚配置的服务器了，url格式: <br />
svn://ip地址/Repository名,这里是:svn://127.0.0.1/searchz.<br />
客户端的简单日常操作: <br />
要取得当前的最新版本,SVN updated. <br />
要修改更新到SVN，选择SVN submit即可(谨慎的话先更新到最新版本后再提交).<br />
<img src ="http://www.blogjava.net/envoydada/aggbug/218323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2008-07-29 11:56 <a href="http://www.blogjava.net/envoydada/archive/2008/07/29/218323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 10g Recycle Bin</title><link>http://www.blogjava.net/envoydada/archive/2008/06/18/208808.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Wed, 18 Jun 2008 03:12:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2008/06/18/208808.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/208808.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2008/06/18/208808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/208808.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/208808.html</trackback:ping><description><![CDATA[<p>在Oracle 10g数据库中，引入了一个回收站(Recycle Bin)的数据库对象。 </p>
<p>回收站，从原理上来说就是一个数据字典表，放置用户Drop掉的数据库对象信息。用户进行Drop操作的对象并没有被数据库删除，仍然会占用空间。除非是由于用户手工进行Purge或者因为存储空间不够而被数据库清掉。数据库有了这样的功能，能够减少很多不必要的麻烦。常常看到开发人员误把表删除，急急忙忙找DBA 来想办法的情况。相信随着10G的大范围应用，这种情形应该比较少见了，我们可以充分利用10g的闪回(FLASHBACK)功能来避免大量的人工误操作。</p>
<p>DBA管理上的相关信息可以从USER_recyclebin(DBA_recyclebin)中获取。 </p>
<p>为了便于测试,我们创建了一个表空间Foo,大小为1M,创建了一个用户Foo,默认的表空间为Foo. </p>
<blockquote>
<pre>SQL&gt; CONNECT foo/foo;
Connected.
SQL&gt; SELECT table_name FROM user_tables;
no rows selected
SQL&gt;
SQL&gt; DESC user_recyclebin
Name                                      Null?    Type
----------------------------------------- -------- -------------------
OBJECT_NAME                               NOT NULL VARCHAR2(30)
ORIGINAL_NAME                                      VARCHAR2(32)
OPERATION                                          VARCHAR2(9)
TYPE                                               VARCHAR2(25)
TS_NAME                                            VARCHAR2(30)
CREATETIME                                         VARCHAR2(19)
DROPTIME                                           VARCHAR2(19)
DROPSCN                                            NUMBER
PARTITION_NAME                                     VARCHAR2(32)
CAN_UNDROP                                         VARCHAR2(3)
CAN_PURGE                                          VARCHAR2(3)
RELATED                                   NOT NULL NUMBER
BASE_OBJECT                               NOT NULL NUMBER
PURGE_OBJECT                              NOT NULL NUMBER
SPACE                                              NUMBER
SQL&gt;
</pre>
</blockquote>user_recyclebin大多是自解释的,相对比较容易理解.
<blockquote>
<pre>SQL&gt; SELECT object_name FROM user_recyclebin;
no rows selected
SQL&gt;
SQL&gt; SELECT object_name FROM user_recyclebin;
no rows selected
SQL&gt; CREATE TABLE foo AS SELECT * FROM DUAL;
Table created.
SQL&gt; SELECT table_name FROM user_tables;
TABLE_NAME
----------------------------------------------
FOO
SQL&gt; DROP TABLE foo;
Table dropped.
SQL&gt; SELECT table_name FROM user_tables;
no rows selected
SQL&gt; SHOW recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO              BIN$V3f/oYUITrCEF2cotS5JaA==$0 TABLE        2004-10-30:14:37:39
SQL&gt;
</pre>
</blockquote>SQL*Plus命令SHOW recyclebin等价于这条SQL:
<blockquote>
<pre>SQL&gt; SELECT original_name, object_name, TYPE, droptime FROM user_recyclebin;
ORIGINAL_NAME   OBJECT_NAME                    TYPE       DROPTIME
--------------- ------------------------------ ---------- --------------------
FOO             BIN$V3f/oYUITrCEF2cotS5JaA==$0 TABLE      2004-10-30:14:37:39
SQL&gt;
SQL&gt; DESC "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
Name                                      Null?    Type
----------------------------------------- -------- ----------------
DUMMY                                              VARCHAR2(1)
SQL&gt;
</pre>
</blockquote>
<p>当一个表被删除并移动到"回收站"中，它的名字要进行一些转换。这样的目的显而易见是为了避免同类对象名称的重复。(这一点和Windows操作系统的回收站不同，Windows中的回收站经过了特殊的处理，操作系统文件可以重名。) </p>
<p>转换后的名字格式如下:</p>
<blockquote>
<pre>BIN$unique_id$version </pre>
</blockquote>
<ul>
    <li>其中BIN代表RecycleBin
    <li>unique_id是数据库中该对象的唯一标志，26个字符长度
    <li>version表示该对象的版本号</li>
</ul>
<blockquote>注：在10g beta 版本中，名字格式如下：
<pre>RB$$objn$object_type$version
</pre>
其中的RB,代表Recycle Bin. objn为表的目录对象号. object_type表示对象类型. version表示版本号. 由数据库指定。</blockquote>下面我们验证一下回收站里数据库对象名字的唯一性:
<blockquote>
<pre>SQL&gt;  CREATE TABLE foo AS SELECT * FROM DUAL;
Table created.
SQL&gt; SELECT table_name FROM user_tables;
TABLE_NAME
------------------------------------------------------------
FOO
SQL&gt; DROP TABLE foo;
Table dropped.
SQL&gt; SHOW recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO              BIN$VL+ZsqVlQF6R2nYnwAqtvw==$0 TABLE        2004-10-30:15:01:42
FOO              BIN$V3f/oYUITrCEF2cotS5JaA==$0 TABLE        2004-10-30:14:37:39
SQL&gt;
</pre>
</blockquote>
<p>能看出来，虽然源表名字相同，在回收站里的对象名字是不同的。 </p>
<h2>针对Recycle Bin对象的操作</h2>
<p>已经放到回收站里的表是不能用drop 命令删除的(注意对象名字上的双引号)： </p>
<blockquote>
<pre>SQL&gt; DROP table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
2  /
DROP table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
*
ERROR at line 1:
ORA-38301: can not perform DDL/DML over objects in Recycle Bin
SQL&gt;
</pre>
</blockquote>如果要清掉该对象,使用purge命令：
<blockquote>
<pre>SQL&gt; PURGE table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
2  /
Table purged.
SQL&gt; SELECT object_name, original_name FROM user_recyclebin;
OBJECT_NAME                    ORIGINAL_NAME
------------------------------ ---------------
BIN$VL+ZsqVlQF6R2nYnwAqtvw==$0 FOO
SQL&gt;
</pre>
</blockquote>对象已经清掉。如果直接清空所有的Recycle Bin中的对象：
<blockquote>
<pre>SQL&gt; PURGE RECYCLEBIN;
Recyclebin purged.
SQL&gt; SELECT object_name, original_name FROM user_recyclebin;
no rows selected
SQL&gt;
</pre>
</blockquote>恢复表，用回闪表的功能：
<blockquote>
<pre>SQL&gt; FLASHBACK TABLE foo TO BEFORE DROP;
Flashback complete.
SQL&gt;SELECT table_name FROM user_tables;
TABLE_NAME
------------------------------------------------------------
FOO
SQL&gt;
</pre>
</blockquote>
<blockquote>注:在10g Beta版本中，使用Undrop命令来做到这一点.</blockquote>有的时候，可能同一个名字的表被删除到回收站中:
<blockquote>
<pre>SQL&gt; DROP TABLE FOO;
Table dropped.
SQL&gt; SHOW RECYCLEBIN
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO              BIN$lfTbzOjISXaw8u0BIO7pNA==$0 TABLE        2004-10-30:15:18:03
SQL&gt;  CREATE TABLE foo AS SELECT * FROM DUAL;
Table created.
SQL&gt; DROP TABLE foo;
Table dropped.
SQL&gt; SHOW RECYCLEBIN
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO              BIN$J63QaUaKTmC1glat+imjeg==$0 TABLE        2004-10-30:15:18:50
FOO              BIN$lfTbzOjISXaw8u0BIO7pNA==$0 TABLE        2004-10-30:15:18:03
SQL&gt; FLASHBACK TABLE FOO TO BEFORE DROP;
Flashback complete.
SQL&gt; SHOW RECYCLEBIN
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO              BIN$lfTbzOjISXaw8u0BIO7pNA==$0 TABLE        2004-10-30:15:18:03
SQL&gt;
</pre>
</blockquote>
<p>默认的恢复是第一个被删除的FOO表。如果要恢复指定的表，可以在FLASHBACK TABLE 后面加上指定的RECYCLEBIN 参数指定其他的名字: </p>
<blockquote>
<pre>SQL&gt; FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP;
FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP
*
ERROR at line 1:
ORA-38312: original name is used by an existing object
SQL&gt; FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP
2  RENAME TO foo2;
Flashback complete.
SQL&gt;
</pre>
</blockquote>
<img src ="http://www.blogjava.net/envoydada/aggbug/208808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2008-06-18 11:12 <a href="http://www.blogjava.net/envoydada/archive/2008/06/18/208808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中分区表的使用</title><link>http://www.blogjava.net/envoydada/archive/2008/06/16/208221.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Mon, 16 Jun 2008 01:27:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2008/06/16/208221.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/208221.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2008/06/16/208221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/208221.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/208221.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在大型的企业应用或企业级的数据库应用中，要处理的数据量通常可以达到几十到几百GB，有的甚至可以到TB级。 虽然存储介质和数据处理技术的发展也很快，但是仍然不能满足用户的需求，为了使用户的大量的数据在读写操作和查询中速度更快，Oracle提供了对表和索引进行分区的技术，以改善大型应用系统的性能。<br />
<br />
使用分区的优点：<br />
&nbsp;&nbsp;&nbsp; 1、增强可用性：如果表的某个分区出现故障，表在其他分区的数据仍然可用；<br />
&nbsp;&nbsp;&nbsp; 2、维护方便：如果表的某个分区出现故障，需要修复数据，只修复该分区即可；<br />
&nbsp;&nbsp;&nbsp; 3、均衡I/O：可以把不同的分区映射到磁盘以平衡I/O，改善整个系统性能；<br />
&nbsp;&nbsp;&nbsp; 4、改善查询性能：对分区对象的查询可以仅搜索自己关心的分区，提高检索速度。<br />
<br />
&nbsp;&nbsp;&nbsp; Oracle数据库提供对表或索引的分区方法有三种：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、范围分区<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、Hash分区（散列分区）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、复合分区<br />
<br />
&nbsp;&nbsp;&nbsp; 下面将以实例的方式分别对这三种分区方法来说明分区表的使用。为了测试方便，我们先建三个表空间。<br />
create tablespace dinya_space01<br />
datafile '/test/demo/oracle/demodata/dinya01.dnf' size 50M<br />
<br />
create tablespace dinya_space01<br />
datafile '/test/demo/oracle/demodata/dinya02.dnf' size 50M<br />
<br />
create tablespace dinya_space01<br />
datafile '/test/demo/oracle/demodata/dinya03.dnf' size 50M<br />
<br />
&nbsp;<br />
1&nbsp;&nbsp;分区表的创建：1.1&nbsp;&nbsp;&nbsp;&nbsp; 范围分区<br />
&nbsp;&nbsp;&nbsp; 范围分区就是对数据表中的某个值的范围进行分区，根据某个值的范围，决定将该数据存储在哪个分区上。如根据序号分区，根据业务记录的创建日期进行分区等。<br />
<br />
&nbsp;&nbsp;&nbsp; 需求描述：有一个物料交易表，表名：material_transactions。该表将来可能有千万级的数据记录数。要求在建该表的时候使用分区表。这时候我们可以使用序号分区三个区，每个区中预计存储三千万的数据，也可以使用日期分区，如每五年的数据存储在一个分区上。<br />
<br />
根据交易记录的序号分区建表：<br />
SQL&gt; create table dinya_test<br />
&nbsp; 2&nbsp; (<br />
&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_id number primary key,<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_id number(8) not null,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_description varchar2(300),<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_date date&nbsp; not null<br />
&nbsp; 7&nbsp; )<br />
&nbsp; 8&nbsp; partition by range (transaction_id)<br />
&nbsp; 9&nbsp; (<br />
&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_01 values less than(30000000) tablespace dinya_space01,<br />
&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_02 values less than(60000000) tablespace dinya_space02,<br />
&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_03 values less than(maxvalue) tablespace dinya_space03<br />
&nbsp;13&nbsp; );<br />
<br />
Table created.<br />
<br />
SQL&gt;<br />
<br />
建表成功，根据交易的序号，交易ID在三千万以下的记录将存储在第一个表空间dinya_space01中，分区名为:par_01，在三千万到六千万之间的记录存储在第二个表空间：dinya_space02中，分区名为：par_02，而交易ID在六千万以上的记录存储在第三个表空间dinya_space03中，分区名为par_03.<br />
<br />
根据交易日期分区建表：<br />
SQL&gt; create table dinya_test<br />
&nbsp; 2&nbsp; (<br />
&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_id number primary key,<br />
&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_id number(8) not null,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_description varchar2(300),<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_date date not null&nbsp;&nbsp; <br />
&nbsp; 7&nbsp; )<br />
&nbsp; 8&nbsp; partition by range (transaction_date)<br />
&nbsp; 9&nbsp; (<br />
&nbsp;10&nbsp; partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')) tablespace dinya_space01,<br />
&nbsp;11&nbsp; partition part_02 values less than(to_date('2010-01-01','yyyy-mm-dd')) tablespace dinya_space02,<br />
&nbsp;12&nbsp; partition part_03 values less than(maxvalue) tablespace dinya_space03<br />
&nbsp;13&nbsp; );<br />
<br />
Table created.<br />
<br />
SQL&gt;<br />
<br />
这样我们就分别建了以交易序号和交易日期来分区的分区表。每次插入数据的时候，系统将根据指定的字段的值来自动将记录存储到制定的分区（表空间）中。<br />
<br />
&nbsp;&nbsp;&nbsp; 当然，我们还可以根据需求，使用两个字段的范围分布来分区，如partition by range ( transaction_id ,transaction_date),分区条件中的值也做相应的改变，请读者自行测试。<br />
<br />
&nbsp;<br />
1.2&nbsp;&nbsp;&nbsp;Hash分区（散列分区）<br />
&nbsp;&nbsp;&nbsp; 散列分区为通过指定分区编号来均匀分布数据的一种分区类型，因为通过在I/O设备上进行散列分区，使得这些分区大小一致。如将物料交易表的数据根据交易ID散列地存放在指定的三个表空间中：<br />
SQL&gt; create table dinya_test<br />
&nbsp; 2&nbsp; (<br />
&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_id number primary key,<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_id number(8) not null,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_description varchar2(300),<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_date date<br />
&nbsp; 7&nbsp; )<br />
&nbsp; 8&nbsp; partition by hash(transaction_id)<br />
&nbsp; 9&nbsp; (<br />
&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_01 tablespace dinya_space01,<br />
&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_02 tablespace dinya_space02,<br />
&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_03 tablespace dinya_space03<br />
&nbsp;13&nbsp; );<br />
<br />
Table created.<br />
<br />
SQL&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 建表成功，此时插入数据，系统将按transaction_id将记录散列地插入三个分区中，这里也就是三个不同的表空间中。<br />
<br />
1.3&nbsp;&nbsp;&nbsp;&nbsp;复合分区<br />
&nbsp;&nbsp;&nbsp; 有时候我们需要根据范围分区后，每个分区内的数据再散列地分布在几个表空间中，这样我们就要使用复合分区。复合分区是先使用范围分区，然后在每个分区内再使用散列分区的一种分区方法，如将物料交易的记录按时间分区，然后每个分区中的数据分三个子分区，将数据散列地存储在三个指定的表空间中：<br />
SQL&gt; create table dinya_test<br />
&nbsp; 2&nbsp; (<br />
&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_id number primary key,<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_id number(8) not null,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_description varchar2(300),<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_date date<br />
&nbsp; 7&nbsp; )<br />
&nbsp; 8&nbsp; partition by range(transaction_date)subpartition by hash(transaction_id)<br />
&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)<br />
&nbsp;10&nbsp; (<br />
&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')),<br />
&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_02 values less than(to_date('2010-01-01','yyyy-mm-dd')),<br />
&nbsp;13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_03 values less than(maxvalue)<br />
&nbsp;14&nbsp; );<br />
<br />
Table created.<br />
<br />
SQL&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 该例中，先是根据交易日期进行范围分区，然后根据交易的ID将记录散列地存储在三个表空间中。<br />
<br />
&nbsp;<br />
2&nbsp;&nbsp;&nbsp;&nbsp;分区表操作<br />
以上了解了三种分区表的建表方法，下面将使用实际的数据并针对按日期的范围分区来测试分区表的数据记录的操作。<br />
2.1&nbsp;&nbsp;&nbsp;&nbsp; 插入记录：<br />
SQL&gt; insert into dinya_test values(1,12,'BOOKS',sysdate);<br />
1 row created.<br />
SQL&gt; insert into dinya_test values(2,12, 'BOOKS',sysdate+30);<br />
1 row created.<br />
SQL&gt; insert into dinya_test values(3,12, 'BOOKS',to_date('2006-05-30','yyyy-mm-dd'));<br />
1 row created.<br />
SQL&gt; insert into dinya_test values(4,12, 'BOOKS',to_date('2007-06-23','yyyy-mm-dd'));<br />
1 row created.<br />
SQL&gt; insert into dinya_test values(5,12, 'BOOKS',to_date('2011-02-26','yyyy-mm-dd'));<br />
1 row created.<br />
SQL&gt; insert into dinya_test values(6,12, 'BOOKS',to_date('2011-04-30','yyyy-mm-dd'));<br />
1 row created.<br />
SQL&gt; commit;<br />
Commit complete.<br />
SQL&gt;<br />
&nbsp;&nbsp;&nbsp; 按上面的建表结果，2006年前的数据将存储在第一个分区part_01上，而2006年到2010年的交易数据将存储在第二个分区part_02上，2010年以后的记录存储在第三个分区part_03上。<br />
2.2&nbsp;&nbsp;&nbsp;&nbsp; 查询分区表记录：<br />
SQL&gt; select * from dinya_test partition(part_01);<br />
TRANSACTION_ID&nbsp;&nbsp;&nbsp; ITEM_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEM_DESCRIPTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRANSACTION_DATE<br />
-------------------------------------------------------------------------------- <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2005-1-14 14:19:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2005-2-13 14:19:<br />
SQL&gt;<br />
<br />
SQL&gt; select * from dinya_test partition(part_02);<br />
TRANSACTION_ID&nbsp;&nbsp;&nbsp;&nbsp; ITEM_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEM_DESCRIPTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRANSACTION_DATE<br />
-------------------------------------------------------------------------------- <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2006-5-30<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2007-6-23<br />
SQL&gt;<br />
<br />
SQL&gt; select * from dinya_test partition(part_03);<br />
TRANSACTION_ID&nbsp;&nbsp;&nbsp;&nbsp; ITEM_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEM_DESCRIPTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRANSACTION_DATE<br />
-------------------------------------------------------------------------------- <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2011-2-26<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2011-4-30<br />
SQL&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 从查询的结果可以看出，插入的数据已经根据交易时间范围存储在不同的分区中。这里是指定了分区的查询，当然也可以不指定分区，直接执行select * from dinya_test查询全部记录。在也检索的数据量很大的时候，指定分区会大大提高检索速度。<br />
<br />
2.3&nbsp;&nbsp;&nbsp;&nbsp; 更新分区表的记录：<br />
SQL&gt; update dinya_test partition(part_01) t set t.item_description='DESK' where t.transaction_id=1;<br />
1 row updated.<br />
<br />
SQL&gt; commit;<br />
Commit complete.<br />
SQL&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 这里将第一个分区中的交易ID=1的记录中的item_description字段更新为&#8220;DESK&#8221;，可以看到已经成功更新了一条记录。但是当更新的时候指定了分区，而根据查询的记录不在该分区中时，将不会更新数据，请看下面的例子：<br />
<br />
SQL&gt; update dinya_test partition(part_01) t set t.item_description='DESK' where t.transaction_id=6;<br />
<br />
0 rows updated.<br />
<br />
SQL&gt; commit;<br />
<br />
Commit complete.<br />
<br />
SQL&gt;<br />
<br />
指定了在第一个分区中更新记录，但是条件中限制交易ID为6，而查询全表，交易ID为6的记录在第三个分区中，这样该条语句将不会更新记录。<br />
<br />
2.4&nbsp;&nbsp;&nbsp;&nbsp; 删除分区表记录：<br />
SQL&gt; delete from dinya_test partition(part_02) t where t.transaction_id=4;<br />
1 row deleted.<br />
<br />
SQL&gt; commit;<br />
Commit complete.<br />
<br />
SQL&gt;<br />
<br />
上面例子删除了第二个分区part_02中的交易记录ID为4的一条记录，和更新数据相同，如果指定了分区，而条件中的数据又不在该分区中时，将不会删除任何数据。<br />
<br />
&nbsp;<br />
3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分区表索引的使用：<br />
分区表和一般表一样可以建立索引，分区表可以创建局部索引和全局索引。当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引。<br />
3.1&nbsp;&nbsp;&nbsp;&nbsp; 局部索引分区的建立：<br />
SQL&gt; create index dinya_idx_t on dinya_test(item_id)<br />
&nbsp; 2&nbsp; local<br />
&nbsp; 3&nbsp; (<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; partition idx_1 tablespace dinya_space01,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp; partition idx_2 tablespace dinya_space02,<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp; partition idx_3 tablespace dinya_space03<br />
&nbsp; 7&nbsp; );<br />
<br />
Index created.<br />
<br />
看查询的执行计划，从下面的执行计划可以看出，系统已经使用了索引：<br />
SQL&gt; select * from dinya_test partition(part_01) t where t.item_id=12;<br />
Execution Plan<br />
----------------------------------------------------------<br />
&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=187)<br />
&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; TABLE ACCESS (BY LOCAL INDEX ROWID) OF 'DINYA_TEST' (Cost=2 Card=1 Bytes=187)<br />
&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; INDEX (RANGE SCAN) OF 'DINYA_IDX_T' (NON-UNIQUE) (Cost=1 Card=1)<br />
<br />
Statistics<br />
----------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; recursive calls<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; db block gets<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp; consistent gets<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp; physical reads<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; redo size<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 334&nbsp; bytes sent via SQL*Net to client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 309&nbsp; bytes received via SQL*Net from client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp; SQL*Net roundtrips to/from client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp; sorts (memory)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; sorts (disk)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp; rows processed<br />
<br />
SQL&gt;<br />
<br />
&nbsp;<br />
3.2&nbsp;&nbsp;&nbsp;&nbsp; 全局索引分区的建立。<br />
全局索引建立时global 子句允许指定索引的范围值，这个范围值为索引字段的范围值：<br />
SQL&gt; create index dinya_idx_t on dinya_test(item_id)<br />
&nbsp; 2&nbsp; global partition by range(item_id)<br />
&nbsp; 3&nbsp; (<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; partition idx_1 values less than (1000) tablespace dinya_space01,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp; &nbsp;partition idx_2 values less than (10000) tablespace dinya_space02,<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp; partition idx_3 values less than (maxvalue) tablespace dinya_space03<br />
&nbsp; 7&nbsp; );<br />
<br />
Index created.<br />
<br />
SQL&gt; <br />
<br />
&nbsp;&nbsp;&nbsp; 本例中对表的item_id字段建立索引分区，当然也可以不指定索引分区名直接对整个表建立索引，如：<br />
SQL&gt; create index dinya_idx_t on dinya_test(item_id);<br />
Index created.<br />
<br />
SQL&gt; <br />
<br />
&nbsp;&nbsp;&nbsp; 同样的，对全局索引根据执行计划可以看出索引已经可以使用：<br />
SQL&gt; select * from dinya_test t where t.item_id=12;<br />
Execution Plan<br />
----------------------------------------------------------<br />
&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=3 Bytes=561)<br />
&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'DINYA_TEST' (Cost&nbsp;=2 Card=3 Bytes=561)<br />
&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; INDEX (RANGE SCAN) OF 'DINYA_IDX_T' (NON-UNIQUE) (Cost=1 Card=3)<br />
<br />
Statistics<br />
----------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp; recursive calls<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; db block gets<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10&nbsp; consistent gets<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; physical reads<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; redo size<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 420&nbsp; bytes sent via SQL*Net to client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 309&nbsp; bytes received via SQL*Net from client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp; SQL*Net roundtrips to/from client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp; sorts (memory)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; sorts (disk)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp; rows processed<br />
SQL&gt;<br />
<br />
4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分区表的维护：<br />
&nbsp;&nbsp;&nbsp; 了解了分区表的建立、索引的建立、表和索引的使用后，在应用的还要经常对分区进行维护和管理。日常维护和管理的内容包括：增加一个分区，合并一个分区及删除分区等等。下面以范围分区为例说明增加、合并、删除分区的一般操作：<br />
4.1&nbsp;&nbsp;&nbsp;&nbsp; 增加一个分区:<br />
SQL&gt; alter table dinya_test <br />
&nbsp; 2&nbsp; add partition part_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace dinya_space03;<br />
<br />
Table altered.<br />
<br />
SQL&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 增加一个分区的时候，增加的分区的条件必须大于现有分区的最大值，否则系统将提示ORA-14074 partition bound must collate higher than that of the last partition 错误。<br />
<br />
&nbsp;&nbsp;&nbsp; <br />
4.2&nbsp;&nbsp;&nbsp;&nbsp; 合并一个分区：<br />
SQL&gt; alter table dinya_test merge partitions part_01,part_02 into partition part_02;<br />
<br />
Table altered.<br />
<br />
SQL&gt; <br />
<br />
&nbsp;&nbsp;&nbsp; 在本例中将原有的表的part_01分区和part_02分区进行了合并，合并后的分区为part_02,如果在合并的时候把合并后的分区定为part_01的时候，系统将提示ORA-14275 cannot reuse lower-bound partition as resulting partition 错误。<br />
<br />
&nbsp;<br />
4.3&nbsp;&nbsp;&nbsp;&nbsp; 删除分区：<br />
SQL&gt; alter table dinya_test drop partition part_01;<br />
<br />
Table altered.<br />
<br />
SQL&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 删除分区表的一个分区后，查询该表的数据时显示，该分区中的数据已全部丢失，所以执行删除分区动作时要慎重，确保先备份数据后再执行，或将分区合并。<br />
<br />
5&nbsp;&nbsp;&nbsp;&nbsp;总结：<br />
&nbsp;&nbsp;&nbsp; 需要说明的是，本文在举例说名分区表事务操作的时候，都指定了分区，因为指定了分区，系统在执行的时候则只操作该分区的记录，提高了数据处理的速度。不要指定分区直接操作数据也是可以的。在分区表上建索引及多索引的使用和非分区表一样。此外，因为在维护分区的时候可能对分区的索引会产生一定的影响，可能需要在维护之后重建索引，相关内容请参考分区表索引部分的文档。
<img src ="http://www.blogjava.net/envoydada/aggbug/208221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2008-06-16 09:27 <a href="http://www.blogjava.net/envoydada/archive/2008/06/16/208221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>