﻿<?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>IT博客-无话不谈，乐趣横生-文章分类-ORACLE文章</title><link>http://www.cnitblog.com/liumh/category/2194.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 30 Sep 2011 05:24:26 GMT</lastBuildDate><pubDate>Fri, 30 Sep 2011 05:24:26 GMT</pubDate><ttl>60</ttl><item><title>聚簇索引与非聚簇索引的区别以及SQL Server查询优化技术</title><link>http://www.cnitblog.com/liumh/articles/13652.html</link><dc:creator>刘孟海</dc:creator><author>刘孟海</author><pubDate>Fri, 14 Jul 2006 07:50:00 GMT</pubDate><guid>http://www.cnitblog.com/liumh/articles/13652.html</guid><wfw:comment>http://www.cnitblog.com/liumh/comments/13652.html</wfw:comment><comments>http://www.cnitblog.com/liumh/articles/13652.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liumh/comments/commentRss/13652.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liumh/services/trackbacks/13652.html</trackback:ping><description><![CDATA[
		<p>
				<em>
						<font color="#0099ff">以下文章转载自</font>
				</em>
				<a href="http://zhenyulu.cnblogs.com/articles/25794.html">
						<em>
								<font color="#0099ff">http://zhenyulu.cnblogs.com/articles/25794.html</font>
						</em>
				</a>
				<br />
				<br />在《数据库原理》里面，对聚簇索引的解释是:聚簇索引的顺序就是数据的物理存储顺序，而对非聚簇索引的解释是:索引顺序与数据物理排列顺序无关。正式因为如此，所以一个表最多只能有一个聚簇索引。</p>
		<p>不过这个定义太抽象了。在SQL Server中，索引是通过二叉树的数据结构来描述的，我们可以这么理解聚簇索引：索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点，只不过有一个指针指向对应的数据块。如下图：</p>
		<p align="center">
				<img height="490" src="http://zhenyulu.cnblogs.com/images/cnblogs_com/zhenyulu/Pic10.JPG" width="658" border="0" />
				<br />
				<font color="#000080">非聚簇索引</font>
		</p>
		<p> </p>
		<p align="center">
				<img height="488" src="http://zhenyulu.cnblogs.com/images/cnblogs_com/zhenyulu/Pic11.JPG" width="652" border="0" />
				<br />
				<font color="#000080">聚簇索引<br /></font>
		</p>
		<p>
				<br />聚簇索引与非聚簇索引的本质区别到底是什么？什么时候用聚簇索引，什么时候用非聚簇索引？</p>
		<p>这是一个很复杂的问题，很难用三言两语说清楚。我在这里从SQL Server索引优化查询的角度简单谈谈(如果对这方面感兴趣的话，可以读一读微软出版的《Microsoft SQL Server 2000数据库编程》第3单元的数据结构引论以及第6、13、14单元)。</p>
		<p>
				<strong>
						<font size="4">
								<br />一、索引块与数据块的区别</font>
				</strong>
		</p>
		<p>大家都知道，索引可以提高检索效率，因为它的二叉树结构以及占用空间小，所以访问速度块。让我们来算一道数学题：如果表中的一条记录在磁盘上占用1000字节的话，我们对其中10字节的一个字段建立索引，那么该记录对应的索引块的大小只有10字节。我们知道，SQL Server的最小空间分配单元是“页（Page）”，一个页在磁盘上占用8K空间，那么这一个页可以存储上述记录8条，但可以存储索引800条。现在我们要从一个有8000条记录的表中检索符合某个条件的记录，如果没有索引的话，我们可能需要遍历8000条×1000字节/8K字节=1000个页面才能够找到结果。如果在检索字段上有上述索引的话，那么我们可以在8000条×10字节/8K字节=10个页面中就检索到满足条件的索引块，然后根据索引块上的指针逐一找到结果数据块，这样IO访问量要少的多。</p>
		<p>
				<font size="4">
						<strong>
								<br />二、索引优化技术</strong>
				</font>
		</p>
		<p>是不是有索引就一定检索的快呢？答案是否。有些时候用索引还不如不用索引快。比如说我们要检索上述表中的所有记录，如果不用索引，需要访问8000条×1000字节/8K字节=1000个页面，如果使用索引的话，首先检索索引，访问8000条×10字节/8K字节=10个页面得到索引检索结果，再根据索引检索结果去对应数据页面，由于是检索所有数据，所以需要再访问8000条×1000字节/8K字节=1000个页面将全部数据读取出来，一共访问了1010个页面，这显然不如不用索引快。</p>
		<p>SQL Server内部有一套完整的数据检索优化技术，在上述情况下，SQL Server的查询计划（Search Plan）会自动使用表扫描的方式检索数据而不会使用任何索引。那么SQL Server是怎么知道什么时候用索引，什么时候不用索引的呢？SQL Server除了日常维护数据信息外，还维护着数据统计信息，下图是数据库属性页面的一个截图：</p>
		<p>
				<img height="490" src="http://zhenyulu.cnblogs.com/images/cnblogs_com/zhenyulu/Pic12.JPG" width="506" border="0" />
		</p>
		<p>从图中我们可以看到，SQL Server自动维护统计信息，这些统计信息包括数据密度信息以及数据分布信息，这些信息帮助SQL Server决定如何制定查询计划以及查询是是否使用索引以及使用什么样的索引（这里就不再解释它们到底如何帮助SQL Server建立查询计划的了）。我们还是来做个实验。建立一张表：tabTest(<u>ID</u>, unqValue，intValue)，其中ID是整形自动编号主索引，unqValue是uniqueidentifier类型，在上面建立普通索引，intValue 是整形，不建立索引。之所以挂上一个没有索引的intValue字段，就是防止SQL Server使用索引覆盖查询优化技术，这样实验就起不到作用了。向表中录入10000条随机记录，代码如下：</p>
		<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 80%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
				<div>
						<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #0000ff">CREATE</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">TABLE</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">dbo</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000">.</span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">tabTest</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> (<br /><img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">ID</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">int</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff00ff">IDENTITY</span>
						<span style="COLOR: #000000"> (</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">1</span>
						<span style="COLOR: #000000">, </span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">1</span>
						<span style="COLOR: #000000">) </span>
						<span style="COLOR: #808080">NOT</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">NULL</span>
						<span style="COLOR: #000000"> ,<br /><img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">unqValue</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">uniqueidentifier</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #808080">NOT</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">NULL</span>
						<span style="COLOR: #000000"> ,<br /><img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">intValue</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">int</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #808080">NOT</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">NULL</span>
						<span style="COLOR: #000000"> <br /><img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />) </span>
						<span style="COLOR: #0000ff">ON</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">PRIMARY</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">GO</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">ALTER</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">TABLE</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">dbo</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000">.</span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">tabTest</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">WITH</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">NOCHECK</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">ADD</span>
						<span style="COLOR: #000000"> <br /><img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">CONSTRAINT</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">PK_tabTest</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">PRIMARY</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">KEY</span>
						<span style="COLOR: #000000">  </span>
						<span style="COLOR: #0000ff">CLUSTERED</span>
						<span style="COLOR: #000000"> <br /><img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> (<br /><img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">ID</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> )  </span>
						<span style="COLOR: #0000ff">ON</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">PRIMARY</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> <br /><img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #0000ff">GO</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">ALTER</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">TABLE</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">dbo</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000">.</span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">tabTest</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">ADD</span>
						<span style="COLOR: #000000"> <br /><img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">CONSTRAINT</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">DF_tabTest_unqValue</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">DEFAULT</span>
						<span style="COLOR: #000000"> (</span>
						<span style="COLOR: #ff00ff">newid</span>
						<span style="COLOR: #000000">()) </span>
						<span style="COLOR: #0000ff">FOR</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">unqValue</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">GO</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">CREATE</span>
						<span style="COLOR: #000000">  </span>
						<span style="COLOR: #0000ff">INDEX</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">IX_tabTest_unqValue</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">ON</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">dbo</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000">.</span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">tabTest</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">unqValue</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000">) </span>
						<span style="COLOR: #0000ff">ON</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">PRIMARY</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">GO</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">declare</span>
						<span style="COLOR: #000000"> @i </span>
						<span style="FONT-WEIGHT: bold; COLOR: #000000">int</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">declare</span>
						<span style="COLOR: #000000"> @v </span>
						<span style="FONT-WEIGHT: bold; COLOR: #000000">int</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">set</span>
						<span style="COLOR: #000000"> @i</span>
						<span style="COLOR: #808080">=</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">0</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">while</span>
						<span style="COLOR: #000000"> @i</span>
						<span style="COLOR: #808080">&lt;</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">10000</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">begin</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">set</span>
						<span style="COLOR: #000000"> @v</span>
						<span style="COLOR: #808080">=</span>
						<span style="COLOR: #ff00ff">rand</span>
						<span style="COLOR: #000000">()</span>
						<span style="COLOR: #808080">*</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">1000</span>
						<span style="COLOR: #000000">    <br /><img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">insert</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">into</span>
						<span style="COLOR: #000000"> tabTest (</span>
						<span style="COLOR: #ff0000">[</span>
						<span style="COLOR: #ff0000">intValue</span>
						<span style="COLOR: #ff0000">]</span>
						<span style="COLOR: #000000">) </span>
						<span style="COLOR: #0000ff">values</span>
						<span style="COLOR: #000000"> (@v)<br /><img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">set</span>
						<span style="COLOR: #000000"> @i</span>
						<span style="COLOR: #808080">=</span>
						<span style="COLOR: #000000">@i</span>
						<span style="COLOR: #808080">+</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">1</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">end</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://zhenyulu.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
				</div>
		</div>
		<p>然后我们执行两个查询并查看执行计划，如图：（在查询分析器的查询菜单中可以打开查询计划，同时图上第一个查询的GUID是我从数据库中找的，大家做实验的时候可以根据自己数据库中的值来定）：</p>
		<p>
				<img height="522" src="http://zhenyulu.cnblogs.com/images/cnblogs_com/zhenyulu/Pic13.JPG" width="668" border="0" />
				<br />
				<br />从图中可以看出，在第一个查询中，SQL Server使用了IX_tabTest_unqValue索引，根据箭头方向，计算机先在索引范围内找，找到后，使用Bookmark Lookup将索引节点映射到数据节点上，最后给出SELECT结果。在第二个查询中，系统直接遍历表给出结果，不过它使用了聚簇索引，为什么呢？不要忘了，聚簇索引的页节点就是数据节点！这样使用聚簇索引会更快一些（不受数据删除、更新留下的存储空洞的影响，直接遍历数据是要跳过这些空洞的）。</p>
		<p>下面，我们在SQL Server中将ID字段的聚簇索引更改为非聚簇索引，然后再执行select * from tabTest，这回我们看到的执行计划变成了：</p>
		<p>
				<img height="320" src="http://zhenyulu.cnblogs.com/images/cnblogs_com/zhenyulu/Pic14.JPG" width="668" border="0" />
		</p>
		<p>SQL Server没有使用任何索引，而是直接执行了Table Scan，因为只有这样，检索效率才是最高的。</p>
		<p>
				<font size="4">
						<strong>
								<br />三、聚簇索引与非聚簇索引的本质区别</strong>
				</font>
		</p>
		<p>现在可以讨论聚簇索引与非聚簇索引的本质区别了。正如本文最前面的两个图所示，聚簇索引的叶节点就是数据节点，而非聚簇索引的页节点仍然是索引检点，并保留一个链接指向对应数据块。</p>
		<p>还是通过一道数学题来看看它们的区别吧：假设有一8000条记录的表，表中每条记录在磁盘上占用1000字节，如果在一个10字节长的字段上建立非聚簇索引主键，需要二叉树节点16000个（这16000个节点中有8000个叶节点，每个页节点都指向一个数据记录），这样数据将占用8000条×1000字节/8K字节=1000个页面；索引将占用16000个节点×10字节/8K字节=20个页面，共计1020个页面。</p>
		<p>同样一张表，如果我们在对应字段上建立聚簇索引主键，由于聚簇索引的页节点就是数据节点，所以索引节点仅有8000个，占用10个页面，数据仍然占有1000个页面。</p>
		<p>下面我们看看在执行插入操作时，非聚簇索引的主键为什么比聚簇索引主键要快。主键约束要求主键不能出现重复，那么SQL Server是怎么知道不出现重复的呢？唯一的方法就是检索。对于非聚簇索引，只需要检索20个页面中的16000个节点就知道是否有重复，因为所有主键键值在这16000个索引节点中都包含了。但对于聚簇索引，索引节点仅仅包含了8000个中间节点，至于会不会出现重复必须检索另外1000个页数据节点才知道，那么相当于检索10+1000=1010个页面才知道是否有重复。所以聚簇索引主键的插入速度要比非聚簇索引主键的插入速度慢很多。</p>
		<p>让我们再来看看数据检索的效率，如果对上述两表进行检索，在使用索引的情况下（有些时候SQL Server执行计划会选择不使用索引，不过我们这里姑且假设一定使用索引），对于聚簇索引检索，我们可能会访问10个索引页面外加1000个数据页面得到结果（实际情况要比这个好），而对于非聚簇索引，系统会从20个页面中找到符合条件的节点，再映射到1000个数据页面上（这也是最糟糕的情况），比较一下，一个访问了1010个页面而另一个访问了1020个页面，可见检索效率差异并不是很大。所以不管非聚簇索引也好还是聚簇索引也好，都适合排序，聚簇索引仅仅比非聚簇索引快一点。</p>
		<p>
				<font size="4">
						<strong>
								<br />结语</strong>
				</font>
		</p>
		<p>好了，写了半天，手都累了。关于聚簇索引与非聚簇索引效率问题的实验就不做了，感兴趣的话可以自己使用查询分析器对查询计划进行分析。SQL Server是一个很复杂的系统，尤其是索引以及查询优化技术，Oracle就更复杂了。了解索引以及查询背后的事情不是什么坏事，它可以帮助我们更为深刻的了解我们的系统。</p>
<img src ="http://www.cnitblog.com/liumh/aggbug/13652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liumh/" target="_blank">刘孟海</a> 2006-07-14 15:50 <a href="http://www.cnitblog.com/liumh/articles/13652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RedHat_AS4_U1上安装Oracle9i数据库9204并升级到9206</title><link>http://www.cnitblog.com/liumh/articles/8016.html</link><dc:creator>刘孟海</dc:creator><author>刘孟海</author><pubDate>Thu, 23 Mar 2006 06:17:00 GMT</pubDate><guid>http://www.cnitblog.com/liumh/articles/8016.html</guid><wfw:comment>http://www.cnitblog.com/liumh/comments/8016.html</wfw:comment><comments>http://www.cnitblog.com/liumh/articles/8016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liumh/comments/commentRss/8016.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liumh/services/trackbacks/8016.html</trackback:ping><description><![CDATA[
		<p dir="ltr" style="MARGIN-RIGHT: 0px" align="left">Red Hat Linux AS4_U1 上安装 Oracle9i 数据库<br />           —— 9204 并上级到9206<br /><br />整理人员：刘孟海<br />整理、测试时间：2005-09-26<br />QQ：113833788<br />Email：<a href="mailto:mr.lmh@163.com">mr.lmh@163.com</a><br />MSN：<a href="mailto:maomao_yuyu@hotmail.com">maomao_yuyu@hotmail.com</a><br /><br />经本人实践安装多次，参考网上的多人整理而成的文档，进行了实践和综合而成了下面的安装<br />手记。下面是我安装时候的具体操作和设置步骤！<br />注：本文当中绿色加粗部分的内容都是需要用户执行的命令<br />具体操作和设置步骤：<br />第一部分、安装前的准备<br />以下操作都是以 ROOT 身份用户进行的<br />1。操作系统的版本查看<br />[root@RHAS4 ~]# uname -a<br />Linux RHAS4 2.6.9-11.EL #1 Fri May 20 18:17:57 EDT 2005 i686 i686 i386 GNU/Linux<br />2。检查系统交换区、内存和磁盘空间<br />[root@RHAS4 oracle]# grep MemTotal /proc/meminfo<br />MemTotal: 3960496 kB<br />[root@RHAS4 oracle]# grep SwapTotal /proc/meminfo<br />SwapTotal: 8193016 kB<br />[root@RHAS4 oracle]# df -h<br />Filesystem Size Used Avail Use% Mounted on<br />/dev/sda10 985M 154M 781M 17% /<br />/dev/sda1 485M 16M 444M 4% /boot<br />/dev/sda2 9.7G 3.8G 5.4G 41% /home<br />/dev/sda5 7.7G 3.4G 4.0G 47% /opt<br />/dev/sda7 4.9G 44M 4.6G 1% /tmp<br />/dev/sda6 4.9G 2.2G 2.5G 48% /usr<br />/dev/sda9 985M 18M 917M 2% /usr/local<br />/dev/sda8 3.9G 86M 3.6G 3% /var<br />要保证系统内存大于256MB，系统交换分区大于1GB，实际生产环境中，对于内存<br />小于等于2GB的系统，交换分区空间建议为内存的数量的两倍，但是不能小于1GB的空间。<br />对于内存大于2GB的系统，建议交换区空间是内存数量的一到两倍。<br />Oracle9204软件需要2.5GB的可用磁盘空间，而数据库则另需要1.2GB的可用磁盘空<br />间。/tmp目录至少需要400MB的可用空间。即 2.5GB+1.2GB+400MB=4.1GB的可用磁盘空<br />间。如果是从硬盘安装oracle，则还需要2.2GB的空间存放oracle安装文件。已分入系统的<br />磁盘空间不足，但是还有未分配的可用磁盘空间的话，可以用fdisk分区命令添加到系统中<br />来。用mkfs.ext3对其进行格式化，用mount挂在刚才格式化的分区（当然为了方便也可以<br />修改/etc/fstab 添加刚才的分区，使之每次系统启动的时候都能自动挂在）。<br />3。检查安装oracle时系统需要的包<br />[root@RHAS4 ~]# rpm -qa gcc make binutils openmotif setarch<br />binutils-2.15.92.0.2-13<br />openmotif-2.2.3-9.RHEL4.1<br />setarch-1.6-1<br />gcc-3.4.3-22.1<br />make-3.80-5<br />[root@RHAS4 oracle]# rpm -qa | grep compat<br />compat-libcom_err-1.0-5<br />compat-gcc-32-3.2.3-47.3<br />java-1.4.2-gcj-compat-1.4.2.0-27jpp<br />compat-libgcc-296-2.96-132.7.2<br />compat-libstdc++-296-2.96-132.7.2<br />compat-openldap-2.1.30-2<br />compat-gcc-32-c++-3.2.3-47.3<br />nss_db-compat-2.2-29<br />compat-libstdc++-33-3.2.3-47.3<br />compat-db-4.1.25-9<br />[root@RHAS4 oracle]# rpm -qa | grep xorg-x11-deprecated<br />xorg-x11-deprecated-libs-6.8.2-1.EL.13.6<br />xorg-x11-deprecated-libs-devel-6.8.2-1.EL.13.6<br />[root@RHAS4 oracle]# rpm -qa | grep gnome-libs<br />gnome-libs-devel-1.4.1.2.90-44.1<br />gnome-libs-1.4.1.2.90-44.1<br />如果以上系统的包(可以在RHAS4的安装光盘中找到这些包文件)没有安装或者版本比<br />较低，因该安装或者升级。升级包命令是 rpm -Uvh 包名 安装新包命令是rpm -ivh 包名。<br />如安装make-3.80-5.rpm 的命令为rpm -ivh make-3.80-5.rpm<br />4。创建 Oracle 组和用户帐号<br />[root@RHAS4 ~]# groupadd oinstall<br />[root@RHAS4 ~]# groupadd dba<br />[root@RHAS4 ~]# useradd -m -g oinstall -G dba oracle<br />[root@RHAS4 ~]# id oracle<br />uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba)<br />[root@RHAS4 ~]# passwd oracle<br />Changing password for user oracle.<br />New UNIX password:<br />BAD PASSWORD: it is based on a dictionary word<br />Retype new UNIX password:<br />passwd: all authentication tokens updated successfully.<br />创建用户安装和维护 Oracle9204软件的 Linux 组和用户帐户。用户帐户称之为oracle<br />组称之为 oinstall 和 dba 。同时更还用户口令。<br />5。配置 Linux 的内核参数<br />[root@RHAS4 etc]# vi sysctl.conf<br /># Kernel sysctl configuration file for Red Hat Linux<br />#<br /># For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and<br /># sysctl.conf(5) for more details.<br /># Controls IP packet forwarding<br />net.ipv4.ip_forward = 0<br /># Controls source route verification<br />net.ipv4.conf.default.rp_filter = 1<br /># Do not accept source routing<br />net.ipv4.conf.default.accept_source_route = 0<br /># Controls the System Request debugging functionality of the kernel<br />kernel.sysrq = 0<br /># Controls whether core dumps will append the PID to the core filename.<br /># Useful for debugging multi-threaded applications.<br />kernel.core_uses_pid = 1<br />kernel.shmmax=3000000000<br />kernel.shmmni=4096<br />kernel.shmall=2097152<br />kernel.sem=250 322000 100 128<br />fs.file-max=65536<br />net.ipv4.ip_local_port_range=1024 65000<br />修改/etc/sysctl.conf 文件，增加绿色字体部分内容。其中的几个参数的含义是：<br />shmmax 最大共享内存2GB物理内存，如果小的话可以按实际情况而定（一般为<br />物理内存的一半）<br />shmmni 最小共享内存4096KB（固定大小4096）<br />shmall 所有内存大小<br />sem 4个参数依次是SEMMSL（每个用户拥有信号量最大数），SEMMNS<br />（系统信号量最大数），SEMOPM（每次semopm系统调用操作数），SEMMNI（系统辛苦<br />量集数最大数）。（这4个参数为固定内容大小）<br />file-max （固定大小65536）<br />ip_local_port_range 端口的范围（为指定的内容）<br />6。设置 oracle 对文件的要求<br />[root@RHAS4 security]# pwd<br />/etc/security<br />[root@RHAS4 security]# vi limits.conf<br /># /etc/security/limits.conf<br />#<br />#Each line describes a limit for a user in the form:<br />#<br />#&lt;domain&gt; &lt;type&gt; &lt;item&gt; &lt;value&gt;<br />#<br />#Where:<br />#&lt;domain&gt; can be:<br /># - an user name<br /># - a group name, with @group syntax<br /># - the wildcard *, for default entry<br /># - the wildcard %, can be also used with %group syntax,<br /># for maxlogin limit<br />................................<br />#* soft core 0<br />#* hard rss 10000<br /><a href="mailto:#@student">#@student</a> hard nproc 20<br /><a href="mailto:#@faculty">#@faculty</a> soft nproc 20<br /><a href="mailto:#@faculty">#@faculty</a> hard nproc 50<br />#ftp hard nproc 0<br /><a href="mailto:#@student">#@student</a> - maxlogins 4<br />oracle soft memlock 3145728<br />oracle hard memlock 3145728<br /># End of file<br />修改 /etc/security/limits.conf 文件，添加上述绿色部分内容到文件。<br />7。准备 Oracle 安装文件目录<br />[root@RHAS4 /]# mkdir -p /opt/ora9/product/9.2<br />[root@RHAS4 /]# mkdir /var/opt/oracle<br />[root@RHAS4 /]# chown oracle.dba /var/opt/oracle<br />[root@RHAS4 /]# chown -R oracle.dba /opt/ora9<br />创建Oracle 安装目录并修改所属者为 oracle， 所属组为dba<br />8。设置 Oracle 环境变量<br />[root@RHAS4 /]# su - oracle<br />[oracle@RHAS4 ~]$ ls -a<br />. .bash_history .bash_profile .emacs .kde .zshrc<br />.. .bash_logout .bashrc .gtkrc nss_db-compat-2.2-29.i386.rpm<br />[oracle@RHAS4 ~]$ vi .bash_profile<br /># .bash_profile<br /># Get the aliases and functions<br />if [ -f ~/.bashrc ]; then<br />. ~/.bashrc<br />fi<br /># User specific environment and startup programs<br />PATH=$PATH:$HOME/bin<br />export DISPLAY="172.17.11.61:0.0"<br />export LD_ASSUME_KERNEL=2.4.19<br />export ORACLE_BASE=/opt/ora9<br />export ORACLE_HOME=$ORACLE_BASE/product/9.2.0<br />export ORACLE_SID=NMSORA<br />export ORACLE_TERM=xterm<br />export NLS_LANG=AMERICAN<br />export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data<br />export LD_LIBRARY_PATH=$ORACLE_HOME/bin:/lib:/usr/lib:/usr/local/lib<br />export PATH=$PATH:$ORACLE_HOME/bin<br />CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:<br />$ORACLE_HOME/rdbms/jlib<br />CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib<br />export CLASSPATH<br />unset USERNAME<br />[oracle@RHAS4 ~]$ pwd<br />/home/oracle<br />[oracle@RHAS4 ~]$ . .bash_profile<br />使刚才配置的.bash_profile文件内容生效。<br />9。分配ORAData的逻辑卷空间<br />[root@RHAS4 ~]$# lvscan<br />ACTIVE '/dev/oradata/nms_system' [2.00 GB] inherit<br />ACTIVE '/dev/oradata/nms_undotbs01' [320.00 MB] inherit<br />ACTIVE '/dev/oradata/nms_cwmlite' [256.00 MB] inherit<br />ACTIVE '/dev/oradata/nms_drsys' [256.00 MB] inherit<br />ACTIVE '/dev/oradata/nms_example01' [256.00 MB] inherit<br />ACTIVE '/dev/oradata/nms_indx01' [256.00 MB] inherit<br />ACTIVE '/dev/oradata/nms_odm01' [256.00 MB] inherit<br />ACTIVE '/dev/oradata/nms_tools' [256.00 MB] inherit<br />ACTIVE '/dev/oradata/nms_user01' [2.00 GB] inherit<br />ACTIVE '/dev/oradata/nms_xdb01' [1.00 GB] inherit<br />ACTIVE '/dev/oradata/nms_undotbs02' [1.25 GB] inherit<br />ACTIVE '/dev/oradata/nms_rbs01' [4.00 GB] inherit<br />ACTIVE '/dev/oradata/nms_rbs02' [4.00 GB] inherit<br />ACTIVE '/dev/oradata/nms_rbs03' [4.00 GB] inherit<br />ACTIVE '/dev/oradata/nms_rbs04' [4.00 GB] inherit<br />ACTIVE '/dev/oradata/nms_temp01' [2.00 GB] inherit<br />ACTIVE '/dev/oradata/nms_ctl01' [1.00 GB] inherit<br />ACTIVE '/dev/oradata/nms_ctl02' [1.00 GB] inherit<br />ACTIVE '/dev/oradata/nms_ctl03' [1.00 GB] inherit<br />ACTIVE '/dev/oradata/nms_hypr01' [5.00 GB] inherit<br />......<br />[root@ RHAS4 ~]# raw -qa<br />/dev/raw/raw1: bound to major 253, minor 2<br />/dev/raw/raw2: bound to major 253, minor 3<br />/dev/raw/raw3: bound to major 253, minor 4<br />/dev/raw/raw4: bound to major 253, minor 5<br />/dev/raw/raw5: bound to major 253, minor 6<br />/dev/raw/raw6: bound to major 253, minor 11<br />/dev/raw/raw7: bound to major 253, minor 12<br />/dev/raw/raw8: bound to major 253, minor 13<br />/dev/raw/raw9: bound to major 253, minor 14<br />/dev/raw/raw10: bound to major 253, minor 0<br />/dev/raw/raw11: bound to major 253, minor 15<br />/dev/raw/raw12: bound to major 253, minor 7<br />/dev/raw/raw13: bound to major 253, minor 1<br />/dev/raw/raw14: bound to major 253, minor 10<br />/dev/raw/raw15: bound to major 253, minor 8<br />/dev/raw/raw16: bound to major 253, minor 9<br />/dev/raw/raw17: bound to major 253, minor 16<br />/dev/raw/raw18: bound to major 253, minor 17<br />/dev/raw/raw19: bound to major 253, minor 18<br />/dev/raw/raw20: bound to major 253, minor 19<br />/dev/raw/raw21: bound to major 253, minor 20<br />......<br />以上是创建的逻辑卷和裸设备。用lvscan查看逻辑卷，用raw -qa 查看当前的裸设备。<br />具体裸设别的创建步骤是：用pvcreate /dev/sda11 /dev/sda12 ...... 创建物理卷，用 vgcreate<br />oradata /dev/sda11 /dev/sda12 ...... 创建逻辑卷组，用lvcreate --size 1000m --name nms_hypr01<br />/dev/oradata 分配逻辑卷，用raw /dev/raw/raw20 /dev/mapper/oradata-nms_hypr01 创建裸设备。<br />呵呵，别忘了给逻辑卷和裸设备更改所有者哦！Chown -R oracle.dba /dev/raw/* chown -R<br />oracle.dba /dev/mapper/oradata* 。另外还要注意的是裸设备raw在每次重启reboot的时候需<br />要重建，为了简单让其在启动后自动创建，我们可以写个简单的脚本SHELL让它自动执行<br />就可以了。我在/var/opt/oracle/目录下建立了两个SHELL<br />[root@RHAS4 oracle]# ls -l /var/opt/oracle/<br />-rwxr-xr-x 1 root root 89 Oct 13 08:27 changeraw.sh<br />-rwxr-xr-x 1 root root 3216 Oct 13 08:26 makeraw.sh<br />其中，makeraw.sh 用于创建裸设备，changeraw.sh 用于给便逻辑卷和裸设备的所有者<br />[root@NMSDB oracle]# more makeraw.sh<br />#!/bin/bash<br />raw /dev/raw/raw1 /dev/mapper/oradata-nms_cwmlite<br />raw /dev/raw/raw2 /dev/mapper/oradata-nms_drsys<br />raw /dev/raw/raw3 /dev/mapper/oradata-nms_example01<br />raw /dev/raw/raw4 /dev/mapper/oradata-nms_indx01<br />raw /dev/raw/raw5 /dev/mapper/oradata-nms_odm01<br />raw /dev/raw/raw6 /dev/mapper/oradata-nms_rbs01<br />raw /dev/raw/raw7 /dev/mapper/oradata-nms_rbs02<br />raw /dev/raw/raw8 /dev/mapper/oradata-nms_rbs03<br />raw /dev/raw/raw9 /dev/mapper/oradata-nms_rbs04<br />raw /dev/raw/raw10 /dev/mapper/oradata-nms_system<br />raw /dev/raw/raw11 /dev/mapper/oradata-nms_temp01<br />raw /dev/raw/raw12 /dev/mapper/oradata-nms_tools<br />raw /dev/raw/raw13 /dev/mapper/oradata-nms_undotbs01<br />raw /dev/raw/raw14 /dev/mapper/oradata-nms_undotbs02<br />raw /dev/raw/raw15 /dev/mapper/oradata-nms_user01<br />raw /dev/raw/raw16 /dev/mapper/oradata-nms_xdb01<br />raw /dev/raw/raw17 /dev/mapper/oradata-nms_ctl01<br />raw /dev/raw/raw18 /dev/mapper/oradata-nms_ctl02<br />raw /dev/raw/raw19 /dev/mapper/oradata-nms_ctl03<br />raw /dev/raw/raw20 /dev/mapper/oradata-nms_hypr01<br />......<br />[root@NMSDB oracle]# more changeraw.sh<br />#!/bin/bash<br />chown -R oracle.dba /dev/raw/*<br />chown -R oracle.dba /dev/mapper/oradata-nms*<br />最后，在/etc/rc.local中加入刚才创建的两个SHELL，就可以开机时自动创建挂在裸<br />设备了！<br />[root@NMSDB oracle]# vi /etc/rc.local<br />#!/bin/sh<br />#<br /># This script will be executed *after* all the other init scripts.<br /># You can put your own initialization stuff in here if you don't<br /># want to do the full Sys V style init stuff.<br />touch /var/lock/subsys/local<br />/var/opt/oracle/makeraw.sh<br />umount /dev/shm<br />mount -t ramfs ramfs /dev/shm<br />chown oracle:oinstall /dev/shm<br /># the following two line create rawN for oracle data and change owner<br /># /var/opt/oracle/makeraw.sh<br />sleep 2<br />/var/opt/oracle/changeraw.sh<br />10。Oracle 安装介质的准备<br />好了一切都准备好了，下面我们看看我们还需要准备写什么？<br />A Oracle9204 的安装文件（三张光盘）<br />B Oracle9204 Update To 9206 的补丁（p3948480_9206_LINUX.zip）<br />C Oracle9206 的补丁（p2617419_10102_GENERIC.zip，<br />p3006854_9204_LINUX.zip，p4188455_10103_linux.zip，p4190568_9206_linux.zip，p4198954<br />.zip）<br />11。正式安装Oracle<br />第一步、先要安装4198954 Oracle PreInstall Patch。 Unzip p4198954.zip 会生成<br />4198954目录，并生成compat-oracle-rhel4-1.0.5.i386.rpm、compat-libcwait-2.0.2.i386.rpm 和<br />README.txt 。 着两个rpm包安装需要xorg-x11-deprecated-libs 和 xorg-x11-deprecated-libsdevel<br />包文件，安装着两个rpm包：rpm -ivh compat-oracle-rhel4-1.0.5.i386.rpm rpm -ivh<br />compat-libcwait-2.0.2.i386.rpm<br />第二步、安装Oracle9204。硬盘安装Oracle 需要先把三个文件解压缩，第一层解压缩<br />gunzip ship-ora-9204-disk1.cpio.gz 第二层解压缩用 cpio -idmv &lt; ship-ora-9204-disk1.cpio 全部<br />解压完毕会生成三个目录分别是Disk1 Disk2 Disk3。如果我们是远程安装 可以通过前面的<br />配置参数export DISPLAY=要显示的IP地址:0.0 来设置。切换到oracle用户，用如下命令<br />启动Oracle安装界面/home/oracle/Disk1/runInstaller。安装过程中要注意两点，第一点是安<br />装的用户组设置为oinstall ，第二点是安装类型是选择只安装Oracle软件不安装Oracle数据<br />库。其他的都直接一路 下一步 就完成了。<br />12。安装Ora9204 Update To Ora9206 Patchs<br />第一步、安装4188455 补丁。 解压缩 unzip p4188455_10103_linux.zip 会生成<br />oraparam.ini 和 README.txt 两个文件。记住oraparam.ini文件的路径，下一步安装时我们会<br />用到这个文件。<br />第二步、安装3948480补丁。解压缩 unzip p3948480_9206_linux.zip 会生成Disk1目<br />录（注意不要和安装Ora9204时生成的Disk1相混哦！ 最好该个目录解压缩。呵呵），安<br />装这个补丁 /home/oracle/patch/Disk1/runInstaller -paramfile<br />/home/oracle/patch/oraparam.ini 安装的时候第一次要先安装OUI，安装完OUI后再运行<br />/home/oracle/patch/Disk1/runInstaller -paramfile /home/oracle/patch/oraparam.ini安装<br />Ora9206的补丁。<br />第三步、安装Ora9206的补丁2617419 和4190568。先解压缩unzip<br />p2617419_10102_generic.zip 会生成OPatch目录，把生成的OPatch目录拷贝到<br />ORACLE_HOME目录下面 cp -a Opatch/ $ORACLE_HOME。设置设置搜索路径 export<br />PATH=$PATH:$ORACLE_HOME/OPatch 同时把这句话加入到oracle用户下面的<br />.bash_profile 文件中。解压缩 p4190568_9206_linux.zip 会生成4190568目录，在目录下执行<br />opatch应用 opatch apply<br />13。执行dbca安装Ora数据库<br />执行dbca 报告 jre was not found in<br />/opt/ora9/product/9.2.0/oracle.swd.jre/bin/i386/native_threads/jre 这时我们需要手工建立一个连<br />接文件 ln -s /opt/ora9/product/9.2.0/oracle.swd.jre/bin/i386/native_threads/java<br />/opt/ora9/product/9.2.0/oracle.swd.jre/bin/i386/native_threads/jre 然后再次执行dbca 出现创<br />建数据库画面，一步一步下去，注意选择字符集和更改控制文件，系统表空间，会滚段文件<br />为以前建立的裸设备文件。只要注意一下表空间大小要小于裸设备大小，应该不会有什么问<br />题。<br />14。重新启动操作系统<br />重启系统发现报告很多 The ld.so.preload file loads the /usr/lib/libcwait.so 错误，并且自<br />动重启是不能成功，解决方法如下：<br />把/usr/lib/libcwait.so 拷贝到 /lib/libcwait.so cp /usr/lib/libcwait.so /lib/libcwait.so<br />把/etc/ld.so.preload 文件中的/usr/lib/libcwait.so 改为/lib/libcwait<br />15。SGA调整<br />SGA内存调整可以通过命令调整也可以通过修高iniORAID.ini 文件方式 网上资料一<br />大堆不再多说了！ 呵呵</p>
<img src ="http://www.cnitblog.com/liumh/aggbug/8016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liumh/" target="_blank">刘孟海</a> 2006-03-23 14:17 <a href="http://www.cnitblog.com/liumh/articles/8016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>