﻿<?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-beauty_beast-随笔分类-oracle调优</title><link>http://www.blogjava.net/beauty_beast/category/7283.html</link><description>上善若水   厚德载物 
</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 06:05:22 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 06:05:22 GMT</pubDate><ttl>60</ttl><item><title>oracle 9i 应用系统优化</title><link>http://www.blogjava.net/beauty_beast/archive/2006/09/22/71250.html</link><dc:creator>柳随风</dc:creator><author>柳随风</author><pubDate>Fri, 22 Sep 2006 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/beauty_beast/archive/2006/09/22/71250.html</guid><wfw:comment>http://www.blogjava.net/beauty_beast/comments/71250.html</wfw:comment><comments>http://www.blogjava.net/beauty_beast/archive/2006/09/22/71250.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/beauty_beast/comments/commentRss/71250.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beauty_beast/services/trackbacks/71250.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近单位要求写技术总结，我根据《ORACLE9i_优化设计与系统调整.》以及网上相关文章，主要结合自己的实际工作经历，写了一篇《oracle 9i 应用系统优化》,本人水平有限，如果有误的话请多多指正，避免误导他人，同时也希望大家共享相关的经验，让我也学习学习。写这篇文章还是花了不少时间，如果转载的话请注明出处。Oracle9i 应用系统优化1、优化前提应用系统方案制定准确，对应用系统运行环境分析...&nbsp;&nbsp;<a href='http://www.blogjava.net/beauty_beast/archive/2006/09/22/71250.html'>阅读全文</a><img src ="http://www.blogjava.net/beauty_beast/aggbug/71250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beauty_beast/" target="_blank">柳随风</a> 2006-09-22 10:01 <a href="http://www.blogjava.net/beauty_beast/archive/2006/09/22/71250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 优化器</title><link>http://www.blogjava.net/beauty_beast/archive/2006/07/07/57125.html</link><dc:creator>柳随风</dc:creator><author>柳随风</author><pubDate>Fri, 07 Jul 2006 06:19:00 GMT</pubDate><guid>http://www.blogjava.net/beauty_beast/archive/2006/07/07/57125.html</guid><wfw:comment>http://www.blogjava.net/beauty_beast/comments/57125.html</wfw:comment><comments>http://www.blogjava.net/beauty_beast/archive/2006/07/07/57125.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beauty_beast/comments/commentRss/57125.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beauty_beast/services/trackbacks/57125.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td align="middle" bgcolor="#f7fbfe" colspan="2" height="10">－－从<font color="#ff0000"><a href="http://www.oradb.net/">http://www.oradb.net/</a>转载过来</font></td>
						</tr>
						<tr>
								<td valign="top" align="left" width="98%" bgcolor="#f7fbfe" height="142">
										<span class="top11">
												<p class="style35">Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是由优化器(Optimizer)来完成的。不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的。相信你一定会用Pl/sql Developer、Toad等工具去看一个语句的执行计划,不过你可能对Rule、Choose、First rows、All rows这几项有疑问,因为我当初也是这样的,那时我也疑惑为什么选了以上的不同的项,执行计划就变了? </p>
												<p class="style35">
														<strong>1、优化器的优化方式 </strong>
												</p>
												<p class="style35">Oracle的优化器共有两种的优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO)。 </p>
												<p class="style35">A、RBO方式：优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。 </p>
												<p class="style35">B、CBO方式：依词义可知,它是看语句的代价(Cost)了,这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小 、有少行、每行的长度等信息。这些统计信息起初在库内是没有的,是你在做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些我们应及时更新这些信息。在Oracle8及以后的版本,Oracle列推荐用CBO的方式。 </p>
												<p class="style35">我们要明了,不一定走索引就是优的 ,比如一个表只有两行数据,一次IO就可以完成全表的检索,而此时走索引时则需要两次IO,这时对这个表做全表扫描(full table scan)是最好的。 </p>
												<p class="style35">
														<strong>2、优化器的优化模式(Optermizer Mode) </strong>
												</p>
												<p class="style35">优化模式包括Rule,Choose,First rows,All rows这四种方式,也就是我们以上所提及的。如下我解释一下： </p>
												<p class="style35">Rule:不用多说,即走基于规则的方式。 </p>
												<p class="style35">Choolse:这是我们应观注的,默认的情况下Oracle用的便是这种方式。指的是当一个表或或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,表又不是特别的小,而且相应的列有索引时,那么就走索引,走RBO的方式。 </p>
												<p class="style35">First Rows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。 </p>
												<p class="style35">All Rows:也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走基于规则的方式。 </p>
												<p class="style35">
														<strong>3、如何设定选用哪种优化模式 </strong>
												</p>
												<p class="style35">a、Instance级别 </p>
												<p class="style35">我们可以通过在init&lt;SID&gt;.ora文件中设定OPTIMIZER_MODE=RULE、OPTIMIZER_MODE=CHOOSE、OPTIMIZER_MODE=FIRST_ROWS、OPTIMIZER_MODE=ALL_ROWS去选用3所提的四种方式,如果你没设定OPTIMIZER_MODE参数则默认用的是Choose这种方式。 </p>
												<p class="style35">B、Sessions级别 </p>
												<p class="style35">通过SQL&gt; ALTER SESSION SET OPTIMIZER_MODE=&lt;Mode&gt;;来设定。 <br /><br />C、语句级别 </p>
												<p class="style35">这些需要用到Hint,比如: <br /><br />SQL&gt; SELECT /*+ RULE */ a.userid, <br /><br />2 b.name, <br /><br />3 b.depart_name <br /><br />4 FROM tf_f_yhda a, <br /><br />5 tf_f_depart b <br /><br />6 WHERE a.userid=b.userid; </p>
												<p class="style35">
														<strong>4、为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢？如何解决呢 ？ </strong>
												</p>
												<p class="style35">A、不走索引大体有以下几个原因 <br /><br />♀你在Instance级别所用的是all_rows的方式 <br /><br />♀你的表的统计信息(最可能的原因) <br /><br />♀你的表很小,上文提到过的,Oracle的优化器认为不值得走索引。 <br /><br />B、解决方法 <br /><br />♀可以修改init&lt;SID&gt;.ora中的OPTIMIZER_MODE这个参数,把它改为Rule或Choose,重起数据库。也可以使用4中所提的Hint. <br /><br />♀删除统计信息 <br /><br />SQL&gt;analyze table table_name delete statistics; <br /><br />♀表小不走索引是对的,不用调的。 </p>
												<p class="style35">
														<strong>5、其它相关 </strong>
												</p>
												<p class="style35">A、如何看一个表或索引是否是统计信息 </p>
												<p class="style35">SQL&gt;SELECT * FROM user_tables <br /><br />2 WHERE table_name=&lt;table_name&gt; <br /><br />3 AND num_rows is not null; </p>
												<p class="style35">SQL&gt;SELECT * FROM user_indexes <br /><br />2 WHERE table_name=&lt;table_name&gt; <br /><br />3 AND num_rows is not null; </p>
												<p class="style35">b、如果我们先用CBO的方式,我们应及时去更新表和索引的统计信息,以免生形不切合实的执行计划。 <br /><br />SQL&gt; ANALYZE TABLE table_name COMPUTE STATISTICS; <br /><br />SQL&gt; ANALYZE INDEX index_name ESTIMATE STATISTICS; </p>
												<p class="style35">具体的ANALYZE语句请参照Oracle8i/9i 的refrence文档。 <br /><br /><br /><br /></p>
										</span>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/beauty_beast/aggbug/57125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beauty_beast/" target="_blank">柳随风</a> 2006-07-07 14:19 <a href="http://www.blogjava.net/beauty_beast/archive/2006/07/07/57125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle调优三步骤之一：查找性能隐患</title><link>http://www.blogjava.net/beauty_beast/archive/2006/02/07/29833.html</link><dc:creator>柳随风</dc:creator><author>柳随风</author><pubDate>Tue, 07 Feb 2006 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/beauty_beast/archive/2006/02/07/29833.html</guid><wfw:comment>http://www.blogjava.net/beauty_beast/comments/29833.html</wfw:comment><comments>http://www.blogjava.net/beauty_beast/archive/2006/02/07/29833.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beauty_beast/comments/commentRss/29833.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beauty_beast/services/trackbacks/29833.html</trackback:ping><description><![CDATA[<P dir=ltr style="MARGIN-RIGHT: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oracle调优工作是非常复杂的，涉及到的方方面面也比较多，但从实际做的项目来看，往往都是应用程序编写的sql存在性能问题，个人认为如果没有用到oracle比较复杂的特性功能，一般的调优还是有章可循的。基本就是三步： 查找、分析、优化，我总结了在项目中一些经验，和大家一起分享，有不对的地方请大家多多指正。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个新系统刚上线的时候，用户量、数据量都不是很多，性能问题一般不会很快体现出来，当用户反映系统开始慢、http请求长时间没有响应（严重的时候导致整个应用down机）时，我们就要密切关注了。<BR>查找的方法实际上oracle已经提供了相关工具－<STRONG>statspack。</STRONG><BR>该工具的安装、使用比较简单，日常主要用到的是脚本：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 脚本路径${oracle_home}/rdbms/admin目录下:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --spdrop.sql&nbsp;&nbsp; 删除脚本，丢弃统计分析的相关包、视图、表、同义词等对象(首次创建无须执行)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --spcreate.sql 创建脚本，生成统计分析的相关包、视图、表、同义词等对象（首次执行前先创建一个表空间）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--统计时生成两次快照，一般在30-40分钟左右<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --执行方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用sys登陆sqlplus后间隔对应时间执行两次 exec statspack.snap;</P>
<P dir=ltr style="MARGIN-RIGHT: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--spreport.sql 生成报告记录sql ,生成的报告文件在系统当前路径下，文件名默认为：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sp_开始快照号_结束快照号.lst&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--sprepsql.sql&nbsp; 分析相关快照中的sql执行计划，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--sppurge.sql&nbsp; 删除在两个快照号之间包括本身的所有统计分析数据。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --sptrunc.sql&nbsp; 截取statspack统计分析的相关数据&nbsp; 在统计分析的对应用户perfstat下执行<BR>&nbsp;每次执行快照生成的统计数据都在perfstat用户中相关的表中，<BR>&nbsp;常用的：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --查询快照相关信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select snap_id,snap_time from stats$snapshot;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --根据hash_value,快照查询对应的统计sql(statspack报告中sql过长会被截掉）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select sql_text&nbsp; from stats$sqltext where hash_value=查询值 and last_snap_id=begin_snap_id;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果使用statspack工具，建议将timed_statistics 设置为true,否则无法查看到准确的统计信息（9i版本后的设置为true对系统性能影响较小）。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alter system set timed_statistics=true;<BR><BR>如果需要实时的查找性能隐患的相关sql,通过v$session_wait,v$session,v$sqltext_with_newlines三张动态视图就可以基本查找到相关的sql，脚本如下：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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><SPAN style="COLOR: #0000ff">select</SPAN><SPAN style="COLOR: #000000">&nbsp;sql_text&nbsp;,sw.event<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">from</SPAN><SPAN style="COLOR: #000000">&nbsp;v$sqltext_with_newlines&nbsp;st,v$session&nbsp;se,v$session_wait&nbsp;sw<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">where</SPAN><SPAN style="COLOR: #000000">&nbsp;st.address</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">se.sql_address&nbsp;</SPAN><SPAN style="COLOR: #808080">and</SPAN><SPAN style="COLOR: #000000">&nbsp;st.hash_value</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">se.sql_hash_value<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #808080">and</SPAN><SPAN style="COLOR: #000000">&nbsp;se.sid&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">sw.sid&nbsp;</SPAN><SPAN style="COLOR: #808080">and</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>(sw.event&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">buffer&nbsp;busy&nbsp;waits</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">or</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;sw.event&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">enqueue</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">or</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;sw.event&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">free&nbsp;buffer&nbsp;waits</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">or</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;sw.event&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">global&nbsp;cache&nbsp;freelist&nbsp;wait</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">or</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;sw.event&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">latch&nbsp;free</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">or</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;sw.event&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">log&nbsp;buffer&nbsp;space</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">or</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;sw.event&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">parallel&nbsp;query&nbsp;qref&nbsp;latch</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">or</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;sw.event&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">pipe&nbsp;put</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">or</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;sw.event&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">write&nbsp;complete&nbsp;waits</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">or</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;sw.event&nbsp;</SPAN><SPAN style="COLOR: #808080">like</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">library&nbsp;cache%</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">or</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;sw.event&nbsp;</SPAN><SPAN style="COLOR: #808080">like</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">log&nbsp;file&nbsp;switch%</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>)&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">order</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">by</SPAN><SPAN style="COLOR: #000000">&nbsp;st.hash_value,st.piece;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV>
<P dir=ltr style="MARGIN-RIGHT: 0px">&nbsp;<BR>这是我目前工作中常用的两种方法，如果有其他方法，希望大家也共享出来。<BR><BR><BR><BR><BR><BR></P>&nbsp;<img src ="http://www.blogjava.net/beauty_beast/aggbug/29833.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beauty_beast/" target="_blank">柳随风</a> 2006-02-07 17:04 <a href="http://www.blogjava.net/beauty_beast/archive/2006/02/07/29833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>