<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AnySQL.net &#187; 分区</title>
	<atom:link href="http://www.anysql.net/tag/%e5%88%86%e5%8c%ba/feed" rel="self" type="application/rss+xml" />
	<link>http://www.anysql.net</link>
	<description>SQLULDR2, DataCopy, DataSync, WebChart, OraMon, AUL/MyDUL, 性能优化及容量分析</description>
	<lastBuildDate>Wed, 14 Jul 2010 09:27:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>为什么LOB或LOB Index的分区名称和表的分区名不同?</title>
		<link>http://www.anysql.net/oracle/lob_partition_name.html</link>
		<comments>http://www.anysql.net/oracle/lob_partition_name.html#comments</comments>
		<pubDate>Wed, 20 Dec 2006 02:44:09 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[LOB]]></category>
		<category><![CDATA[分区]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/%e4%b8%ba%e4%bb%80%e4%b9%88lob%e6%88%96lob-index%e7%9a%84%e5%88%86%e5%8c%ba%e5%90%8d%e7%a7%b0%e5%92%8c%e8%a1%a8%e7%9a%84%e5%88%86%e5%8c%ba%e5%90%8d%e4%b8%8d%e5%90%8c.html</guid>
		<description><![CDATA[&#160; &#160; 当我们创建一个LOCAL的索引时, 这个索引各个分区的名称和表的相应分区的名称是相同的, 但LOB分区及LOB Index分区的名称则是系统产生的. 不知道Oracle为什么顺道改一下? &#160; &#160; 下面的查询结果是在10g上进行的, 创建了一个有CLOB字段的分区表, 然后到OBJ$中去查询: SQL&#62; select obj#,name, subname from obj$ &#160;&#160;2&#160;&#160;where owner#=25&#160;&#160;and obj# &#62; 10000 order by obj#; &#160;&#160;&#160;&#160;&#160;&#160;OBJ# NAME&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; SUBNAME &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212; &#160;&#160;&#160;&#160; 10006 T_PRTLOB &#160;&#160;&#160;&#160; 10007 T_PRTLOB&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; SYS_P21 &#160;&#160;&#160;&#160; 10008 T_PRTLOB&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; SYS_P22 &#160;&#160;&#160;&#160; 10009 SYS_LOB0000010006C00002$$ &#160;&#160;&#160;&#160; 10010 SYS_LOB0000010006C00002$$&#160;&#160;&#160;&#160;&#160;&#160;SYS_LOB_P23 &#160;&#160;&#160;&#160; 10011 SYS_LOB0000010006C00002$$&#160;&#160;&#160;&#160;&#160;&#160;SYS_LOB_P24 &#160;&#160;&#160;&#160; 10012 SYS_IL0000010006C00002$$ [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; 当我们创建一个LOCAL的索引时, 这个索引各个分区的名称和表的相应分区的名称是相同的, 但LOB分区及LOB Index分区的名称则是系统产生的. 不知道Oracle为什么顺道改一下? </p>
<p>&nbsp; &nbsp; 下面的查询结果是在10g上进行的, 创建了一个有CLOB字段的分区表, 然后到OBJ$中去查询: </p>
<blockquote class="prefont"><p>
SQL&gt; select obj#,name, subname from obj$ <br />
&nbsp;&nbsp;2&nbsp;&nbsp;where owner#=25&nbsp;&nbsp;and obj# &gt; 10000 order by obj#;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJ# NAME&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; SUBNAME<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 10006 T_PRTLOB<br />
&nbsp;&nbsp;&nbsp;&nbsp; 10007 T_PRTLOB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SYS_P21<br />
&nbsp;&nbsp;&nbsp;&nbsp; 10008 T_PRTLOB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SYS_P22<br />
&nbsp;&nbsp;&nbsp;&nbsp; 10009 SYS_LOB0000010006C00002$$<br />
&nbsp;&nbsp;&nbsp;&nbsp; 10010 SYS_LOB0000010006C00002$$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SYS_LOB_P23<br />
&nbsp;&nbsp;&nbsp;&nbsp; 10011 SYS_LOB0000010006C00002$$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SYS_LOB_P24<br />
&nbsp;&nbsp;&nbsp;&nbsp; 10012 SYS_IL0000010006C00002$$<br />
&nbsp;&nbsp;&nbsp;&nbsp; 10013 SYS_IL0000010006C00002$$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SYS_IL_P25<br />
&nbsp;&nbsp;&nbsp;&nbsp; 10014 SYS_IL0000010006C00002$$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SYS_IL_P26</p>
<p>9 rows selected.
</p></blockquote>
<p>&nbsp; &nbsp; 不过按对象号排序, 则很容易对号上座的. </p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2008/02/21 -- <a href="http://www.anysql.net/aulmydul/recover_lob_without_system.html" title="无SYSTEM时的LOB恢复">无SYSTEM时的LOB恢复</a> (1)</li><li>2007/06/20 -- <a href="http://www.anysql.net/aulmydul/aul4b_not_beta_version.html" title="aul4b不再是Beta版了, 这里的B指的是LOB的支持">aul4b不再是Beta版了, 这里的B指的是LOB的支持</a> (2)</li><li>2007/06/19 -- <a href="http://www.anysql.net/aulmydul/aul_lob_recovery_speed.html" title="AUL恢复LOB类型的速度之谜, 慢还是快?">AUL恢复LOB类型的速度之谜, 慢还是快?</a> (0)</li><li>2007/06/19 -- <a href="http://www.anysql.net/aulmydul/aul_max_lob_dir.html" title="由一个目录下可以存放多少文件引出的问题">由一个目录下可以存放多少文件引出的问题</a> (2)</li><li>2007/03/07 -- <a href="http://www.anysql.net/oracle/lob_inout_row.html" title="Enable/Disable行内存贮的LOB字段性能分析">Enable/Disable行内存贮的LOB字段性能分析</a> (4)</li><li>2006/12/21 -- <a href="http://www.anysql.net/aulmydul/aul4_update_20061221.html" title="AUL 4 Beta程序更新情况 &#8211; 2006.12.21">AUL 4 Beta程序更新情况 &#8211; 2006.12.21</a> (9)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/oracle_composite_partition.html" title="多个列的Range分区时, 记录会到哪个分区?">多个列的Range分区时, 记录会到哪个分区?</a> (1)</li><li>2010/06/19 -- <a href="http://www.anysql.net/tools/sqluldr2-non-free-features.html" title="2011年起SQLULDR2中的收费功能">2011年起SQLULDR2中的收费功能</a> (3)</li><li>2009/11/07 -- <a href="http://www.anysql.net/tools/sqluldr2-mysql-data-migration-test.html" title="MySQL数据迁移测试">MySQL数据迁移测试</a> (8)</li><li>2009/06/25 -- <a href="http://www.anysql.net/tools/oramon-system-event.html" title="oramon如何收集V$SYSTEM_EVENT数据?">oramon如何收集V$SYSTEM_EVENT数据?</a> (3)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/lob_partition_name.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>多个列的Range分区时, 记录会到哪个分区?</title>
		<link>http://www.anysql.net/oracle/oracle_composite_partition.html</link>
		<comments>http://www.anysql.net/oracle/oracle_composite_partition.html#comments</comments>
		<pubDate>Sun, 15 Oct 2006 05:10:43 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[分区]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/%e5%a4%9a%e4%b8%aa%e5%88%97%e7%9a%84range%e5%88%86%e5%8c%ba%e6%97%b6-%e8%ae%b0%e5%bd%95%e4%bc%9a%e5%88%b0%e5%93%aa%e4%b8%aa%e5%88%86%e5%8c%ba.html</guid>
		<description><![CDATA[&#160; &#160; 今天网友问了我一个关于多个列的Range分区的问题, 说是记录没有进入到他想要的分区, 由于在实际应用中我还没有用过这样的分区, 在理解那条记录要进入那个分区时, 还真有点难, 在一个列时, 是用小于来判断的, 那多个列时, 不是每个列都是用小于来判断的. 作为一个组合字段, 前导的字段是用小于等于来排序的, 我们可以想着&#8221;A2 < A3 < B2 < B3", 这时插入A1时, 五个值的排序是如何的呢? 按照字典的排序方法当然"A1"是最小的了, 而"A2"就进入了第二个分区. &#160; &#160; 不知道我自已在说什么? 总之这种情况下不是两个列都是用小于来比较的. create table t (c1 date,c2 number) partition by range(c1,c2)&#160; &#160; &#160; ( partition p11 values less than (to_date(&#8217;20010201&#8242;,&#8217;yyyymmdd&#8217;),2), partition p12 values less than (to_date(&#8217;20010201&#8242;,&#8217;yyyymmdd&#8217;),3), partition p21&#160; values [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; 今天<a href="http://xsb.itpub.net/" target="_blank">网友</a>问了我一个关于多个列的Range分区的问题, 说是记录没有进入到他想要的分区,<br />
由于在实际应用中我还没有用过这样的分区, 在理解那条记录要进入那个分区时, 还真有点难, 在一个列时,<br />
是用小于来判断的, 那多个列时, 不是每个列都是用小于来判断的. 作为一个组合字段,<br />
前导的字段是用小于等于来排序的, 我们可以想着&#8221;A2 < A3 < B2 < B3", 这时插入A1时, 五个值的排序是如何的呢?<br />
按照字典的排序方法当然"A1"是最小的了, 而"A2"就进入了第二个分区.</p>
<p>&nbsp; &nbsp; 不知道我自已在说什么? 总之这种情况下不是两个列都是用小于来比较的.</p>
<blockquote class="prefont"><p>
create table t (c1 date,c2 number) partition by range(c1,c2)&nbsp; &nbsp; &nbsp; <br/><br />
(<br/><br />
partition p11 values less than (to_date(&#8217;20010201&#8242;,&#8217;yyyymmdd&#8217;),2),<br/><br />
partition p12 values less than (to_date(&#8217;20010201&#8242;,&#8217;yyyymmdd&#8217;),3),<br/><br />
partition p21&nbsp; values less than (to_date(&#8217;20010301&#8242;,&#8217;yyyymmdd&#8217;),2),<br/><br />
partition p22&nbsp; values less than (to_date(&#8217;20010301&#8242;,&#8217;yyyymmdd&#8217;),3)<br/><br />
);<br/><br />
<br/><br />
insert into t values (to_date(&#8217;20010201&#8242;,&#8217;yyyymmdd&#8217;),1);<br/><br />
insert into t values (to_date(&#8217;20010202&#8242;,&#8217;yyyymmdd&#8217;),2);<br/><br />
<br/><br />
&#8211;结果第一条数据进了p11（期望是p21）,第二条数据进了p21（期望是p22）<br/><br />
<br/><br />
SQL&gt; select * from t partition (p11);<br/><br />
<br/><br />
C1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; C2<br/><br />
&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;-<br/><br />
01-FEB-01&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1<br/><br />
<br/><br />
SQL&gt; select * from t partition (p21);<br/><br />
<br/><br />
C1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; C2<br/><br />
&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;-<br/><br />
02-FEB-01&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2<br/>
</p></blockquote>
<p>&nbsp; &nbsp; 那个网友还提议Oracle应当加入List+List的复合分区, 我想List+Hash也是有用的吧.</p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2006/12/19 -- <a href="http://www.anysql.net/oracle/lob_partition_name.html" title="为什么LOB或LOB Index的分区名称和表的分区名不同?">为什么LOB或LOB Index的分区名称和表的分区名不同?</a> (4)</li><li>2010/06/19 -- <a href="http://www.anysql.net/tools/sqluldr2-non-free-features.html" title="2011年起SQLULDR2中的收费功能">2011年起SQLULDR2中的收费功能</a> (3)</li><li>2009/11/07 -- <a href="http://www.anysql.net/tools/sqluldr2-mysql-data-migration-test.html" title="MySQL数据迁移测试">MySQL数据迁移测试</a> (8)</li><li>2009/06/25 -- <a href="http://www.anysql.net/tools/oramon-system-event.html" title="oramon如何收集V$SYSTEM_EVENT数据?">oramon如何收集V$SYSTEM_EVENT数据?</a> (3)</li><li>2009/06/25 -- <a href="http://www.anysql.net/tools/oramon-session-history.html" title="oramon如何从V$SESSION收集性能数据?">oramon如何从V$SESSION收集性能数据?</a> (0)</li><li>2009/06/24 -- <a href="http://www.anysql.net/oracle/oramon-system-statistics.html" title="oramon如何从V$SYSSTAT收集性能数据?">oramon如何从V$SYSSTAT收集性能数据?</a> (1)</li><li>2009/05/26 -- <a href="http://www.anysql.net/dba/hard-choose-mysql-or-oracle.html" title="MySQL或Oracle, 是个问题?">MySQL或Oracle, 是个问题?</a> (7)</li><li>2009/05/21 -- <a href="http://www.anysql.net/dba/oramon-database-perf-alert.html" title="用oramon的数据进行报警">用oramon的数据进行报警</a> (3)</li><li>2009/04/26 -- <a href="http://www.anysql.net/aulmydul/aul_customer_world_map.html" title="拯救数据, 拯救地球?">拯救数据, 拯救地球?</a> (9)</li><li>2009/04/16 -- <a href="http://www.anysql.net/dba/oracle_direct_export.html" title="猜想Oracle Direct方式">猜想Oracle Direct方式</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/oracle_composite_partition.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>基于分区统计信息的SQL执行计划的性能问题</title>
		<link>http://www.anysql.net/oracle/partition_based_sqlplan.html</link>
		<comments>http://www.anysql.net/oracle/partition_based_sqlplan.html#comments</comments>
		<pubDate>Fri, 08 Sep 2006 21:16:46 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[分区]]></category>
		<category><![CDATA[性能调整]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/%e5%9f%ba%e4%ba%8e%e5%88%86%e5%8c%ba%e7%bb%9f%e8%ae%a1%e4%bf%a1%e6%81%af%e7%9a%84sql%e6%89%a7%e8%a1%8c%e8%ae%a1%e5%88%92%e7%9a%84%e6%80%a7%e8%83%bd%e9%97%ae%e9%a2%98.html</guid>
		<description><![CDATA[&#160; &#160; 在Oracle 9i的CBO优化器中, 会对有绑定变量的SQL在硬分析时做一次Peaking, 这时如果分区表的各个分区的统计信息不一致不同能导致执行计划不同的话, Peaking就有可能出错了. 下面是我做的一个例子(9.2.0.5的库上测试的). &#160; &#160; 创建一个测试表: SQL&#62; create table t_partplan &#160; 2&#160; ( &#160; 3&#160; &#160; col1 number not null, &#160; 4&#160; &#160; col2 number not null, &#160; 5&#160; &#160; col3 varchar2(40), &#160; 6&#160; &#160; col4 varchar2(40) &#160; 7&#160; ) &#160; 8&#160; partition by range(col1) &#160; 9&#160; ( 10&#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; 在Oracle 9i的CBO优化器中, 会对有绑定变量的SQL在硬分析时做一次Peaking,<br />
这时如果分区表的各个分区的统计信息不一致不同能导致执行计划不同的话, Peaking就有可能出错了.<br />
下面是我做的一个例子(9.2.0.5的库上测试的). </p>
<p>&nbsp; &nbsp; 创建一个测试表: </p>
<blockquote class="prefont"><p>
SQL&gt; create table t_partplan<br />
&nbsp; 2&nbsp; (<br />
&nbsp; 3&nbsp; &nbsp;  col1 number not null,<br />
&nbsp; 4&nbsp; &nbsp;  col2 number not null,<br />
&nbsp; 5&nbsp; &nbsp;  col3 varchar2(40),<br />
&nbsp; 6&nbsp; &nbsp;  col4 varchar2(40)<br />
&nbsp; 7&nbsp; )<br />
&nbsp; 8&nbsp; partition by range(col1)<br />
&nbsp; 9&nbsp; (<br />
10&nbsp; &nbsp;  partition P1 values less than (5000),<br />
11&nbsp; &nbsp;  partition p2 values less than (maxvalue)<br />
12&nbsp; );</p>
<p>Table created.
</p></blockquote>
<p>&nbsp; &nbsp; 接下来插入一些数据, 建一个索引, 然后分析表, 将索引的一个分区联机重建. </p>
<p><span id="more-38"></span></p>
<blockquote class="prefont"><p>
insert into t_partplan <br />
&nbsp; select OBJECT_ID, mod(object_id,100), <br />
&nbsp; SUBOBJECT_NAME,TIMESTAMP from dba_objects <br />
&nbsp; where object_id &gt; 0;<br />
create index idx_t_partplan on t_partplan(col2,col1) local;<br />
ANALYZE TABLE t_partplan COMPUTE STATISTICS;<br />
ALTER INDEX idx_t_partplan REBUILD PARTITION P2 ONLINE;
</p></blockquote>
<p>&nbsp; &nbsp; 接下来来看按COL2去访问不同分区时的执行计划: </p>
<blockquote class="prefont"><p>
SQL&gt; SELECT * FROM t_partplan PARTITION (P1) WHERE col2=99;</p>
<p>Execution Plan<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
&nbsp;  0&nbsp; &nbsp; &nbsp; SELECT STATEMENT Optimizer=CHOOSE (Cost=8 Card=89 <br />
&nbsp;  1&nbsp; &nbsp; 0&nbsp;  TABLE ACCESS (FULL) OF &#8216;T_PARTPLAN&#8217; (Cost=8 Card=89</p>
<p>SQL&gt; SELECT * FROM t_partplan PARTITION (P2) WHERE col2=99;</p>
<p>Execution Plan<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
&nbsp;  0&nbsp; &nbsp; &nbsp; SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=130 <br />
&nbsp;  1&nbsp; &nbsp; 0&nbsp;  TABLE ACCESS (BY LOCAL INDEX ROWID) OF &#8216;T_PARTPLAN&#8217; <br />
&nbsp;  2&nbsp; &nbsp; 1&nbsp; &nbsp;  INDEX (RANGE SCAN) OF &#8216;IDX_T_PARTPLAN&#8217; (NON-UNIQUE)
</p></blockquote>
<p>&nbsp; &nbsp; 如果你的SQL是只访问一个分区的, 有可能就会遇上这种问题,<br />
我在重建索引时因为没有加&#8221;COMPUTE STATISTICS&#8221;选项, 而遇到了执行计划变坏的情况.<br />
更多时侯我们是想不到, 不是做不到. </p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2006/12/25 -- <a href="http://www.anysql.net/dba/column_type_mismatch.html" title="列类型和变量类型不一致引起的性能问题?">列类型和变量类型不一致引起的性能问题?</a> (2)</li><li>2006/12/19 -- <a href="http://www.anysql.net/oracle/lob_partition_name.html" title="为什么LOB或LOB Index的分区名称和表的分区名不同?">为什么LOB或LOB Index的分区名称和表的分区名不同?</a> (4)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/oracle_composite_partition.html" title="多个列的Range分区时, 记录会到哪个分区?">多个列的Range分区时, 记录会到哪个分区?</a> (1)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_06.html" title="Query Rewrite的一般理解之六">Query Rewrite的一般理解之六</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_05.html" title="Query Rewrite的一般理解之五">Query Rewrite的一般理解之五</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_04.html" title="Query Rewrite的一般理解之四">Query Rewrite的一般理解之四</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_03.html" title="Query Rewrite的一般理解之三">Query Rewrite的一般理解之三</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_02.html" title="Query Rewrite的一般理解之二">Query Rewrite的一般理解之二</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_01.html" title="Query Rewrite的一般理解之一">Query Rewrite的一般理解之一</a> (0)</li><li>2006/10/11 -- <a href="http://www.anysql.net/oracle/olap_tuning_startransformation.html" title="数据库优化中什么是星型转换(Star Transform)?">数据库优化中什么是星型转换(Star Transform)?</a> (4)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/partition_based_sqlplan.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OLTP系统中避免不必要的排序的重要性</title>
		<link>http://www.anysql.net/oracle/oltp_avoid_sorting.html</link>
		<comments>http://www.anysql.net/oracle/oltp_avoid_sorting.html#comments</comments>
		<pubDate>Mon, 21 Aug 2006 18:13:09 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[OLTP]]></category>
		<category><![CDATA[分区]]></category>
		<category><![CDATA[排序]]></category>
		<category><![CDATA[绑定变量]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/oltp%e7%b3%bb%e7%bb%9f%e4%b8%ad%e9%81%bf%e5%85%8d%e4%b8%8d%e5%bf%85%e8%a6%81%e7%9a%84%e6%8e%92%e5%ba%8f%e7%9a%84%e9%87%8d%e8%a6%81%e6%80%a7.html</guid>
		<description><![CDATA[&#160; &#160; 就前一篇中的例子, 来作一下10046的跟踪, 看看排序倒底占据了多少的CPU. 我一直是认为就算几条记录的排序也是有代价的, 至少它需要去准备一块排序区, 并运行排序的算法. 有时数据库系统中每秒种会有上千次的内存排序, 这时如果将排序的次数减少到一半, 机器的负荷会下降多少呢? 对于排序没有直接的印象, 不象对于逻辑读那么熟悉. 就等着一步一步研究吧? &#160; &#160; 先来看一下分区列上用绑定变量(有排序)时的情况: SELECT * FROM TEST_SORT &#160; WHERE COL2=:p_co1 AND PKEY=:p_key AND COL1 IN (810,510,210) &#160; ORDER BY COL1 Rows&#160; &#160; Row Source Operation &#8212;&#8212;-&#160; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#160; &#160; &#160; 3&#160; SORT ORDER BY (cr=9 r=0 w=0 time=390 us) &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; 就前一篇中的例子, 来作一下10046的跟踪, 看看排序倒底占据了多少的CPU.<br />
我一直是认为就算几条记录的排序也是有代价的, 至少它需要去准备一块排序区, 并运行排序的算法.<br />
有时数据库系统中每秒种会有上千次的内存排序, 这时如果将排序的次数减少到一半,<br />
机器的负荷会下降多少呢? 对于排序没有直接的印象, 不象对于逻辑读那么熟悉.<br />
就等着一步一步研究吧? </p>
<p>&nbsp; &nbsp; 先来看一下分区列上用绑定变量(有排序)时的情况: </p>
<blockquote class="prefont"><p>
SELECT * FROM TEST_SORT <br />
&nbsp; WHERE COL2=:p_co1 AND PKEY=:p_key AND COL1 IN (810,510,210)<br />
&nbsp; ORDER BY COL1</p>
<p>Rows&nbsp; &nbsp;  Row Source Operation<br />
&#8212;&#8212;-&nbsp; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
&nbsp; &nbsp; &nbsp; 3&nbsp; SORT ORDER BY (cr=9 r=0 w=0 time=390 us)<br />
&nbsp; &nbsp; &nbsp; 3&nbsp;  PARTITION &#8230; (cr=9 r=0 w=0 time=246 us)<br />
&nbsp; &nbsp; &nbsp; 3&nbsp; &nbsp; INLIST ITERATOR&nbsp; (cr=9 r=0 w=0 time=240 us)<br />
&nbsp; &nbsp; &nbsp; 3&nbsp; &nbsp;  TABLE ACCESS BY &#8230; (cr=9 r=0 w=0 time=205 us)<br />
&nbsp; &nbsp; &nbsp; 3&nbsp; &nbsp; &nbsp; INDEX RANGE SCAN &#8230; (cr=6 r=0 w=0 time=141 us)
</p></blockquote>
<p><span id="more-12"></span></p>
<p>&nbsp; &nbsp; 然后来看一下分区列中不用绑定变量(无排序)的情况: </p>
<blockquote class="prefont"><p>
SELECT *&nbsp; FROM TEST_SORT <br />
&nbsp;  WHERE COL2=:p_co1 AND PKEY=0 AND COL1 IN (810,510,210)<br />
&nbsp;  ORDER BY COL1</p>
<p>Rows&nbsp; &nbsp;  Row Source Operation<br />
&#8212;&#8212;-&nbsp; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
&nbsp; &nbsp; &nbsp; 3&nbsp; INLIST ITERATOR&nbsp; (cr=10 r=0 w=0 time=253 us)<br />
&nbsp; &nbsp; &nbsp; 3&nbsp;  TABLE ACCESS BY &#8230; (cr=10 r=0 w=0 time=211 us)<br />
&nbsp; &nbsp; &nbsp; 3&nbsp; &nbsp; INDEX RANGE SCAN &#8230; (cr=7 r=0 w=0 time=152 us)
</p></blockquote>
<p>&nbsp; &nbsp; 可以看到如果没有排序时, 时间基本相等(246 us和253 us), 有了排序后就上升到了390 us,<br />
虽然这个排序什么也没有做, 因为返回的记录已经排好序了. 在这儿就三条记录, 但CPU时间上升了50%.<br />
因此在OLTP中减少不必要的排序是很有必要的. </p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2006/08/18 -- <a href="http://www.anysql.net/oracle/sort_bind_partition.html" title="分区列上的绑定变量与排序的一点关系">分区列上的绑定变量与排序的一点关系</a> (1)</li><li>2007/11/16 -- <a href="http://www.anysql.net/dba/oracle_11g_oltp_compress.html" title="Oracle 11G OLTP Compress支持的含义">Oracle 11G OLTP Compress支持的含义</a> (4)</li><li>2006/12/19 -- <a href="http://www.anysql.net/oracle/lob_partition_name.html" title="为什么LOB或LOB Index的分区名称和表的分区名不同?">为什么LOB或LOB Index的分区名称和表的分区名不同?</a> (4)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/oracle_composite_partition.html" title="多个列的Range分区时, 记录会到哪个分区?">多个列的Range分区时, 记录会到哪个分区?</a> (1)</li><li>2006/09/08 -- <a href="http://www.anysql.net/oracle/partition_based_sqlplan.html" title="基于分区统计信息的SQL执行计划的性能问题">基于分区统计信息的SQL执行计划的性能问题</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/oltp_avoid_sorting.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>分区列上的绑定变量与排序的一点关系</title>
		<link>http://www.anysql.net/oracle/sort_bind_partition.html</link>
		<comments>http://www.anysql.net/oracle/sort_bind_partition.html#comments</comments>
		<pubDate>Fri, 18 Aug 2006 22:05:59 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[分区]]></category>
		<category><![CDATA[排序]]></category>
		<category><![CDATA[绑定变量]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/%e5%88%86%e5%8c%ba%e5%88%97%e4%b8%8a%e7%9a%84%e7%bb%91%e5%ae%9a%e5%8f%98%e9%87%8f%e4%b8%8e%e6%8e%92%e5%ba%8f%e7%9a%84%e4%b8%80%e7%82%b9%e5%85%b3%e7%b3%bb.html</guid>
		<description><![CDATA[&#160; &#160; 大量的排序操作会占用大量的CPU资源, 即便是内存中的排序. 通常我们可以用索引来 避免排, 但在分区表上, 就有些区别了. 下面是我做的一个测试例子, 你会知道在分区列上使用绑定变量 时会引起不必要的排序. 虽然在这个例子中用不用绑定变量都很明显地只访问一个分区, 但是Oracle还是 在用绑定变量时进行了不必要的排序. 因此Oracle有时是笨得可爱. &#160; &#160; 请使用下面的角本来创建测试表: CREATE TABLE TEST_SORT ( &#160; COL1 NUMBER, &#160; COL2 NUMBER, &#160; pkey number, &#160; col3 varchar2(30) ) partition by range(pkey) ( &#160; partition p0 values less than (1), &#160; partition p1 values less than (2), &#160; partition [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; 大量的排序操作会占用大量的CPU资源, 即便是内存中的排序. 通常我们可以用索引来<br />
避免排, 但在分区表上, 就有些区别了. 下面是我做的一个测试例子, 你会知道在分区列上使用绑定变量<br />
时会引起不必要的排序. 虽然在这个例子中用不用绑定变量都很明显地只访问一个分区, 但是Oracle还是<br />
在用绑定变量时进行了不必要的排序. 因此Oracle有时是笨得可爱. </p>
<p>&nbsp; &nbsp; 请使用下面的角本来创建测试表: </p>
<blockquote class="prefont"><p>
CREATE TABLE TEST_SORT <br />
(<br />
&nbsp;  COL1 NUMBER, <br />
&nbsp;  COL2 NUMBER, <br />
&nbsp;  pkey number, <br />
&nbsp;  col3 varchar2(30)<br />
)<br />
partition by range(pkey)<br />
(<br />
&nbsp;  partition p0 values less than (1),<br />
&nbsp;  partition p1 values less than (2),<br />
&nbsp;  partition p2 values less than (3)<br />
) tablespace data02;</p>
<p>INSERT INTO TEST_SORT <br />
&nbsp;  SELECT ROWNUM, MOD(ROWNUM,100), mod(rownum,3), OBJECT_NAME<br />
&nbsp; &nbsp;  FROM DBA_OBJECTS WHERE ROWNUM &lt; 5001;</p>
<p>commit;<br />
CREATE INDEX IDX_TEST_SORT ON (COL1,COL2,PKEY) LOCAL;
</p></blockquote>
<p><span id="more-11"></span></p>
<p>&nbsp; &nbsp; 然后检查用和不用绑定变量的两个SQL的执行计划: </p>
<blockquote class="prefont"><p>
SELECT * FROM TEST_SORT <br />
&nbsp; &nbsp; WHERE COL2=:p_co1 AND PKEY=0 AND COL1 IN (810,510,210)<br />
&nbsp; &nbsp; ORDER BY COL1;</p>
<p>Execution Plan<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
&nbsp;  0&nbsp; &nbsp; &nbsp; SELECT STATEMENT Optimizer=RULE (Cost=3 &#8230;<br />
&nbsp;  1&nbsp; &nbsp; 0&nbsp;  INLIST ITERATOR<br />
&nbsp;  2&nbsp; &nbsp; 1&nbsp; &nbsp;  TABLE ACCESS (BY LOCAL INDEX ROWID) OF &#8230; <br />
&nbsp;  3&nbsp; &nbsp; 2&nbsp; &nbsp; &nbsp;  INDEX (RANGE SCAN) OF &#8216;TEST_SORT_IDX1&#8242; </p>
<p>SELECT * FROM TEST_SORT <br />
&nbsp; &nbsp; WHERE COL2=:p_co1 AND PKEY=:P_KEY AND COL1 IN (810,510,210)<br />
&nbsp; &nbsp; ORDER BY COL1;</p>
<p>Execution Plan<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
&nbsp;  0&nbsp; &nbsp; &nbsp; SELECT STATEMENT Optimizer=RULE (Cost=3 &#8230;)<br />
&nbsp;  1&nbsp; &nbsp; 0&nbsp;  SORT (ORDER BY) (Cost=3 Card=1 Bytes=31)<br />
&nbsp;  2&nbsp; &nbsp; 1&nbsp; &nbsp;  PARTITION RANGE (SINGLE)<br />
&nbsp;  3&nbsp; &nbsp; 2&nbsp; &nbsp; &nbsp;  INLIST ITERATOR<br />
&nbsp;  4&nbsp; &nbsp; 3&nbsp; &nbsp; &nbsp; &nbsp;  TABLE ACCESS (BY LOCAL INDEX ROWID) OF<br />
&#8230;<br />
&nbsp;  5&nbsp; &nbsp; 4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  INDEX (RANGE SCAN) OF<br />
&#8216;TEST_SORT_IDX1&#8242;
</p></blockquote>
<p>&nbsp; &nbsp; 你可以使用10046事件获得执行时的更详细的区别. </p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2006/08/21 -- <a href="http://www.anysql.net/oracle/oltp_avoid_sorting.html" title="OLTP系统中避免不必要的排序的重要性">OLTP系统中避免不必要的排序的重要性</a> (5)</li><li>2006/12/19 -- <a href="http://www.anysql.net/oracle/lob_partition_name.html" title="为什么LOB或LOB Index的分区名称和表的分区名不同?">为什么LOB或LOB Index的分区名称和表的分区名不同?</a> (4)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/oracle_composite_partition.html" title="多个列的Range分区时, 记录会到哪个分区?">多个列的Range分区时, 记录会到哪个分区?</a> (1)</li><li>2006/09/08 -- <a href="http://www.anysql.net/oracle/partition_based_sqlplan.html" title="基于分区统计信息的SQL执行计划的性能问题">基于分区统计信息的SQL执行计划的性能问题</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/sort_bind_partition.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
