<?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>OS与Oracle &#187; Memory</title>
	<atom:link href="http://www.os2ora.com/tag/memory/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.os2ora.com</link>
	<description>专注于现实世界Oracle数据库的高性能，高可扩展性与新一代数据库Exadata架构</description>
	<lastBuildDate>Mon, 19 Sep 2011 09:10:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>一样的delete语句，不一样的执行时间</title>
		<link>http://www.os2ora.com/same-delete-statement-different-elasped-time/</link>
		<comments>http://www.os2ora.com/same-delete-statement-different-elasped-time/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 15:00:30 +0000</pubDate>
		<dc:creator>Kaya</dc:creator>
				<category><![CDATA[数据库性能调优]]></category>
		<category><![CDATA[buffer cache]]></category>
		<category><![CDATA[delete]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[OLTP]]></category>

		<guid isPermaLink="false">http://www.os2ora.com/same-delete-statement-different-elasped-time/</guid>
		<description><![CDATA[一个delete语句，在”同样”的环境下执行两遍。第一次花了16分钟，第二次花了24分钟。
在做delete之前，已经保证表A尽可能一致，两次delete都是以串行方式执行。在这个表上都没有索引存在。整个系统只有这个SQL在运行。
问题究竟出现在哪里呢？]]></description>
			<content:encoded><![CDATA[<p>Kaya 发表于 <a href="http://www.os2ora.com/">os2ora.com</a></p>
<p>一个delete语句，在”同样”的环境下执行两遍。第一次花了16分钟，第二次花了24分钟。</p>
<p>这条delete语句是这样子的:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">DELETE</span> <span style="color: #993333; font-weight: bold;">FROM</span> T A
 <span style="color: #993333; font-weight: bold;">WHERE</span> <span style="color: #993333; font-weight: bold;">EXISTS</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #cc66cc;">1</span>
          <span style="color: #993333; font-weight: bold;">FROM</span> T B
         <span style="color: #993333; font-weight: bold;">WHERE</span> B<span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">=</span> A<span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">KEY</span>
           <span style="color: #993333; font-weight: bold;">AND</span> A<span style="color: #66cc66;">.</span>ROWID &amp;lt; B<span style="color: #66cc66;">.</span>ROWID<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>在做delete之前，已经保证表A尽可能一致，两次delete都是以串行方式执行。在这个表上都没有索引存在。整个系统只有这个SQL在运行。</p>
<p>问题究竟出现在哪里呢？</p>
<p>先检查redo, undo还有logical reads, 看看是否存在不同:</p>
<table cellspacing="0" cellpadding="2" width="488" border="1">
<tbody>
<tr>
<td valign="top" width="210">Name</td>
<td valign="top" width="111">First</td>
<td valign="top" width="165">Second</td>
</tr>
<tr>
<td valign="top" width="210">redo size</td>
<td valign="top" width="111">11,104,438,044</td>
<td valign="top" width="165">11,104,338,924</td>
</tr>
<tr>
<td valign="top" width="210">session logical reads</td>
<td valign="top" width="111">28,549,120</td>
<td valign="top" width="165">28,544,934</td>
</tr>
<tr>
<td valign="top" width="210">redo entries</td>
<td valign="top" width="111">23,921,147</td>
<td valign="top" width="165">23,920,329</td>
</tr>
<tr>
<td valign="top" width="210">undo change vector size</td>
<td valign="top" width="111">7,803,284,388</td>
<td valign="top" width="165">7,803,283,836</td>
</tr>
</tbody>
</table>
<p>可以看出，两次运行基本上产生的redo和undo和所要求的logical reads都是差不多一样的。</p>
<p>在检查其它性能数据的过程中，两者的物理IO有了明显的差别:</p>
<table cellspacing="0" cellpadding="2" width="525" border="1">
<tbody>
<tr>
<td valign="top" width="244">Name</td>
<td valign="top" width="115">First</td>
<td valign="top" width="164">Second</td>
</tr>
<tr>
<td valign="top" width="244">cell physical IO interconnect byte</td>
<td valign="top" width="115">19,284,271,104</td>
<td valign="top" width="164">27,067,580,416</td>
</tr>
<tr>
<td valign="top" width="244">physical IO disk bytes</td>
<td valign="top" width="115">19,284,271,104</td>
<td valign="top" width="164">27,067,580,416</td>
</tr>
<tr>
<td valign="top" width="244">physical read total bytes</td>
<td valign="top" width="115">14,780,686,336</td>
<td valign="top" width="164">22,563,995,648</td>
</tr>
<tr>
<td valign="top" width="244">physical write total bytes</td>
<td valign="top" width="115">2,251,792,384</td>
<td valign="top" width="164">2,251,792,384</td>
</tr>
</tbody>
</table>
<p>明显地，第二次运行比第一次运行多了一半的读IO，这刚好与第二次运行的时间比第一次运行的时间多一半相吻合。</p>
<p>一个可能的解释在于buffer cache在两次运行开始时所处的状态不同。导致了第二次运行时没有充足的free buffer，从而进一步导致了buffer命中率的下降。这从下面关于buffer的一些性能指标值也可以看出:</p>
<table cellspacing="0" cellpadding="2" width="642" border="1">
<tbody>
<tr>
<td valign="top" width="261">Name</td>
<td valign="top" width="185">First</td>
<td valign="top" width="199">Second</td>
</tr>
<tr>
<td valign="top" width="261">hot buffers moved to head of LRU</td>
<td valign="top" width="185">1,366,782</td>
<td valign="top" width="199">2,379,131</td>
</tr>
<tr>
<td valign="top" width="261">free buffer inspected</td>
<td valign="top" width="185">2,784,972</td>
<td valign="top" width="199">3,761,837</td>
</tr>
<tr>
<td valign="top" width="261">free buffer requested</td>
<td valign="top" width="185">2,705,382</td>
<td valign="top" width="199">3,670,718</td>
</tr>
<tr>
<td valign="top" width="261">dirty buffers inspected</td>
<td valign="top" width="185">356,118</td>
<td valign="top" width="199">895,195</td>
</tr>
</tbody>
</table>
<p>为了验证上面的结论，可以做两个测试，第一是在跑delete之前把buffer cache flush，第二是在跑delete之前把表A的数据加载进buffer cache。</p>
<p>当flush buffer cache后，delete花了17分钟。</p>
<p>当把数据加载进buffer cache后，delete花了8分钟。</p>
<p>这个例子最重要的一点在于说明了memory对OLTP系统性能的严重影响。这是与DSS系统存在明显区别的一个地方，也可以说是串行操作与并行操作的显著区别。对OLTP系统而言，SGA起着减少物理IO的作用。对SGA的有效管理与配置，影响着OLTP系统的性能。而对于DSS系统而言，PGA并不会减少扫描表的IO量。PGA里面的数据随着操作的完成而得以释放。</p>
<p>Note: 上面性能指标值来源于v$mystat视图。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.os2ora.com/same-delete-statement-different-elasped-time/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>性能调优是一个对系统资源均衡取舍的过程</title>
		<link>http://www.os2ora.com/performance-tunning-is-a-tradeoff-among-resource-consumption/</link>
		<comments>http://www.os2ora.com/performance-tunning-is-a-tradeoff-among-resource-consumption/#comments</comments>
		<pubDate>Sat, 30 May 2009 15:43:11 +0000</pubDate>
		<dc:creator>Kaya</dc:creator>
				<category><![CDATA[数据库性能调优]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[IO]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[multitable insert]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[tradeoff]]></category>
		<category><![CDATA[系统资源]]></category>

		<guid isPermaLink="false">http://www.os2ora.com/performance-tunning-is-a-tradeoff-among-resource-consumption/</guid>
		<description><![CDATA[这个世界上没有绝对的真理。大家都认为对的东西，在某种场合却是不适宜的。我们需要对系统资源利用情况进行综合的分析，才能最终确定一个最适宜的方式。这里并没有一个公式化的经验，证明multi_table_insert永远都是优于single table insert的......]]></description>
			<content:encoded><![CDATA[<p>Kaya 发表于 <a href="http://www.os2ora.com">os2ora.com</a></p>
<p>这个世界上没有绝对的真理。大家都认为对的东西，在某种场合却是不适宜的。</p>
<p>Oracle有一个很有用的扩展，叫做<a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_9014.htm#i2095116">multi_table_insert</a>, 它可以实现把一个子查询的结果根据条件把每件记录插入到一个或多个表中。例如下面的例子:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">ALL</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">,</span> sales_sun<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> sales_mon<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">,</span> sales_tue<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">,</span> sales_wed<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">,</span> sales_thu<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">5</span><span style="color: #66cc66;">,</span> sales_fri<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">6</span><span style="color: #66cc66;">,</span> sales_sat<span style="color: #66cc66;">&#41;</span>
   <span style="color: #993333; font-weight: bold;">SELECT</span> product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">,</span> sales_sun<span style="color: #66cc66;">,</span>
      sales_mon<span style="color: #66cc66;">,</span> sales_tue<span style="color: #66cc66;">,</span> sales_wed<span style="color: #66cc66;">,</span> sales_thu<span style="color: #66cc66;">,</span> sales_fri<span style="color: #66cc66;">,</span> sales_sat
      <span style="color: #993333; font-weight: bold;">FROM</span> sales_input_table;</pre></div></div>

<p>它实现把sales_input_table里的每条记录变化成7条记录，并插入到目标表sales中。稍微做下改写，让每条记录插入到两个表中，就是下面的例子:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">ALL</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">,</span> sales_sun<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> sales_mon<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">,</span> sales_tue<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">,</span> sales_wed<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">,</span> sales_thu<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">5</span><span style="color: #66cc66;">,</span> sales_fri<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">6</span><span style="color: #66cc66;">,</span> sales_sat<span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">--</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">,</span> sales_sun<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> sales_mon<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">,</span> sales_tue<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">,</span> sales_wed<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">,</span> sales_thu<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">5</span><span style="color: #66cc66;">,</span> sales_fri<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">6</span><span style="color: #66cc66;">,</span> sales_sat<span style="color: #66cc66;">&#41;</span>
   <span style="color: #993333; font-weight: bold;">SELECT</span> product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">,</span> sales_sun<span style="color: #66cc66;">,</span>
      sales_mon<span style="color: #66cc66;">,</span> sales_tue<span style="color: #66cc66;">,</span> sales_wed<span style="color: #66cc66;">,</span> sales_thu<span style="color: #66cc66;">,</span> sales_fri<span style="color: #66cc66;">,</span> sales_sat
      <span style="color: #993333; font-weight: bold;">FROM</span> sales_input_table;</pre></div></div>

<p>和下面的实现比较，哪种方式性能好呢？</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">ALL</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">,</span> sales_sun<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> sales_mon<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">,</span> sales_tue<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">,</span> sales_wed<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">,</span> sales_thu<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">5</span><span style="color: #66cc66;">,</span> sales_fri<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">6</span><span style="color: #66cc66;">,</span> sales_sat<span style="color: #66cc66;">&#41;</span>
   <span style="color: #993333; font-weight: bold;">SELECT</span> product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">,</span> sales_sun<span style="color: #66cc66;">,</span>
      sales_mon<span style="color: #66cc66;">,</span> sales_tue<span style="color: #66cc66;">,</span> sales_wed<span style="color: #66cc66;">,</span> sales_thu<span style="color: #66cc66;">,</span> sales_fri<span style="color: #66cc66;">,</span> sales_sat
      <span style="color: #993333; font-weight: bold;">FROM</span> sales_input_table;
<span style="color: #808080; font-style: italic;">--</span>
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">ALL</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">,</span> sales_sun<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> sales_mon<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">,</span> sales_tue<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">,</span> sales_wed<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">,</span> sales_thu<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">5</span><span style="color: #66cc66;">,</span> sales_fri<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">INTO</span> sales2 <span style="color: #66cc66;">&#40;</span>prod_id<span style="color: #66cc66;">,</span> cust_id<span style="color: #66cc66;">,</span> time_id<span style="color: #66cc66;">,</span> amount<span style="color: #66cc66;">&#41;</span>
      <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">6</span><span style="color: #66cc66;">,</span> sales_sat<span style="color: #66cc66;">&#41;</span>
   <span style="color: #993333; font-weight: bold;">SELECT</span> product_id<span style="color: #66cc66;">,</span> customer_id<span style="color: #66cc66;">,</span> weekly_start_date<span style="color: #66cc66;">,</span> sales_sun<span style="color: #66cc66;">,</span>
      sales_mon<span style="color: #66cc66;">,</span> sales_tue<span style="color: #66cc66;">,</span> sales_wed<span style="color: #66cc66;">,</span> sales_thu<span style="color: #66cc66;">,</span> sales_fri<span style="color: #66cc66;">,</span> sales_sat
      <span style="color: #993333; font-weight: bold;">FROM</span> sales_input_table;</pre></div></div>

<p>或许大家都认为第一种方式会运行得更快。毕竟，第一种方式比第二种方式少了一遍对sales_input_table的扫描。</p>
<p>正确答案呢？It depends!</p>
<p>第二种方式不一定比第二种方式慢，相反地，第二种方式比第一种方式具有更好的“可扩展性”。</p>
<p>在第一种方式下，当表sales和sales2(可能还有sales3,sales4)是一个有着大量分区（例如1024个子分区）的分区表时，用并行方式执行这条语句将需要大量的内存。一个可能的后果就是系统内存会变得严重不足，最终可以引起OS频繁进行Memory的Swapping，导致整个OS失去响应。</p>
<p>对于第二种方式，从系统资源的角度看，这是一个CPU-Bound的过程，IO在这里并不是瓶颈。多一遍对sales_input_table的扫描其实并不会带来性能上的明显下降。</p>
<p>可以看出，这里我们需要对CPU, IO, Memory的资源利用情况进行综合的分析，才能最终确定一个最适宜的方式。并没有一个公式化的经验，证明<a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_9014.htm#i2095116">multi_table_insert</a>永远都是优于<em>single table insert</em>的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.os2ora.com/performance-tunning-is-a-tradeoff-among-resource-consumption/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

