<?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; 系统架构</title>
	<atom:link href="http://www.os2ora.com/category/architecture/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>OLTP Performance Video &#8211; Concurrent Mid-Tier Connections and Trouble of Parsing</title>
		<link>http://www.os2ora.com/oltp-performance-video-concurrent-mid-tier-connections-and-trouble-of-parsing/</link>
		<comments>http://www.os2ora.com/oltp-performance-video-concurrent-mid-tier-connections-and-trouble-of-parsing/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 08:40:15 +0000</pubDate>
		<dc:creator>Kaya</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[数据库性能调优]]></category>
		<category><![CDATA[系统架构]]></category>
		<category><![CDATA[Connection Mid-Tier]]></category>
		<category><![CDATA[OLTP]]></category>
		<category><![CDATA[Parse]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.os2ora.com/oltp-performance-video-concurrent-mid-tier-connections-and-trouble-of-parsing/</guid>
		<description><![CDATA[下一个Demo是关于OLTP性能的。与Retail Demo对应，这个Demo内部的名字叫做Connection Demo。Retail Demo主要展现的是数据仓库的性能，而Connection Demo展现的主要是OLTP的性能。这个Demo首次出现于2010年的OOW，往事不堪回首，那段时间我刚好在Oracle总部，刚好负责这个Demo的开发工作，怀念那段与bug做斗争的日子。]]></description>
			<content:encoded><![CDATA[<p>Kaya 发表于os2ora.com</p>
<p>下一个Oracle Real World Performace Group所录制的Demo视频是关于OLTP性能的。与Retail Demo对应，这个Demo内部的名字叫做Connection Demo。Retail Demo主要展现的是数据仓库的性能，而Connection Demo展现的主要是OLTP的性能。这个Demo首次出现于2010年的OOW，往事不堪回首，那段时间我刚好在Oracle总部负责这个Demo的开发工作，怀念那段与bug做斗争的日子。</p>
<p>这个Demo的功能比较多，录制好的视频主要有两个主题：</p>
<p>1. OLTP Performance &#8211; The Trouble with Parsing<br />
这是关于Oracle 里面的no parse, soft parse 和 hard parse。</p>
<p>这是一个老生常谈的问题，自从有了Oracle之后。</p>
<p>在no parse情况下，情况很理想，响应时间1毫秒，吞吐量30,000.<br />
在soft parse情况下，情况有点糟糕了&#8230;<br />
在hard parse情况下，情况更糟糕了&#8230; 关于shared pool的等待事件…</p>
<p>另一个展示的是不使用长连接而使用短连接有什么后果。究竟频繁地执行logon -&gt; do some stuff -&gt; logoff会导致什么严重的后果？服务器上的SYS% CPU为何会比USER% CPU还高？</p>
<p>还有，EM在这三种情况下的Performance Page会有什么直观的展示？</p>
<p>一切尽在这个Demo中，嗯。</p>
<p><iframe src="http://www.youtube.com/embed/1oddFEyUAjs" frameborder="0" width="420" height="345"></iframe></p>
<p>2. OLTP Performance  &#8211; Concurrent Mid-Tier Connections<br />
这是一个很有趣的Demo.</p>
<p>有多少客户的系统连接着成千上万个数据库连接？有多少个客户把实现成32000个并发连接做为系统的需求进行设计？</p>
<p>过度的连接会导致什么后果？</p>
<p>这个Demo模拟了两个应用服务器对一个数据库服务器的连接。应用会话数为9600个，使用JDBC Connection Pool连接到数据库。</p>
<p>开始时，Connection Pool有2048个连接。这时你会看到一个看起来非常常见的系统。CPU很忙，系统看起来很正常，等待事件看起来很多很常见。如buffer busy waits, enq: TX &#8211; index contention, log buffer space等等。嗯，DBA开始分析这些等待事件，开始调整参数。 过年过节的时间，系统变得更不稳定，DBA们开始提心吊胆渡过每一秒钟。</p>
<p>这个Demo起码回答了几个问题：<br />
如果把Connection 的个数降到1024，会有什么结果？会话的等待时间会不会变得更长？吞吐量会不会下降？<br />
如果把Connection 的个数降到96，又会有什么结果？<br />
还有，EM在这三种情况下的Performance Page会有什么直观的展示？</p>
<p>看了，保证你会很惊讶。</p>
<p><iframe src="http://www.youtube.com/embed/xNDnVOCdvQ0" frameborder="0" width="420" height="345"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.os2ora.com/oltp-performance-video-concurrent-mid-tier-connections-and-trouble-of-parsing/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Exadata V2 架构分析 (6)</title>
		<link>http://www.os2ora.com/exadata-architecture-analysis-6/</link>
		<comments>http://www.os2ora.com/exadata-architecture-analysis-6/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 03:25:27 +0000</pubDate>
		<dc:creator>Kaya</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[数据库性能调优]]></category>
		<category><![CDATA[系统架构]]></category>
		<category><![CDATA[Cell Flash Cache]]></category>
		<category><![CDATA[EHCC]]></category>
		<category><![CDATA[Exadata Hybrid Columnar Compression]]></category>
		<category><![CDATA[Flash Cache]]></category>
		<category><![CDATA[Partition]]></category>
		<category><![CDATA[Storage Index]]></category>

		<guid isPermaLink="false">http://www.os2ora.com/exadata-architecture-analysis-6/</guid>
		<description><![CDATA[从第一篇开始到现在，Cell Flash Cache, Exadata Hybrid Columnar Compression, Storage Index轮番上场，加上V1版本里出现的Smart Scan，Infiniband等等，多少会给人以眼花缭乱的感觉。

最根本的一点，当然在于Exadata本身是一个balanced system。

不过，这些技术做为一个整体对实际应用会带来多大的好处呢？这不是一个很好回答的问题，当然也可以用一句话回答——具体问题具体分析......]]></description>
			<content:encoded><![CDATA[<p>Kaya 发表于 <a href="http://www.os2ora.com/">os2ora.com</a></p>
<p>做下回顾与思考。</p>
<p>从第一篇开始到现在，Cell Flash Cache, Exadata Hybrid Columnar Compression, Storage Index轮番上场，加上V1版本里出现的Smart Scan，Infiniband等等，多少会给人以眼花缭乱的感觉。</p>
<p>最根本的一点，当然在于Exadata本身是一个balanced system。</p>
<p>不过，这些技术做为一个整体对实际应用会带来多大的好处呢？这不是一个很好回答的问题，当然也可以用一句话回答——具体问题具体分析。</p>
<p>思路应该是这样的，首先明了当前系统的现状</p>
<ul>
<li>如果当前系统运作得很好，简直完美的设计，分区，并行，并发控制等都无可挑剔，业务量也没超过系统极限，那么也许只有一些技术会对性能提升比较明显，如Smart Scan。举个例子，如果原来系统没存在IO上的瓶颈，Cell Flash Cache就英雄无用武之地了。</li>
<li>如果当前系统运作得很好，简直完美的设计，分区，并行，并发控制等都无可挑剔，业务量大大超过系统极限，系统出现CPU或者IO或者Network上的瓶颈了，这时或许就是考虑升级的时候了。</li>
<li>如果当前系统为小数据量所设计，如刚开始没有分区，但随着业务量的增长，系统出现CPU或者IO或者Network上的瓶颈了，这时可以有两条途径，改进原来的设计，或者考虑硬件升级了。</li>
</ul>
<p>设计上的改进包括</p>
<ul>
<li>分区</li>
<li>压缩</li>
<li>etc.</li>
</ul>
<p>硬件上的升级包括</p>
<ul>
<li>Smart Scan</li>
<li>Flash Cache</li>
<li>Storage Index</li>
<li>etc.</li>
</ul>
<p>最后，做为一个例子，可以考核一个原来的系统（没分区，没压缩，没Flash Cache，没Storage Index），分区，压缩，Flash Cache，Storage Index，分别能带来的性能上的提升，及做为一个整体带来的性能提升。</p>
<p>感性认识还是更重要的，虽然我把它放在最后面了。</p>
<p>&#160;</p>
<p><a href="http://www.os2ora.com/wp-content/uploads/2010/06/image1.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="342" alt="image" src="http://www.os2ora.com/wp-content/uploads/2010/06/image_thumb1.png" width="662" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.os2ora.com/exadata-architecture-analysis-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exadata V2 架构分析 (5)</title>
		<link>http://www.os2ora.com/exadata-architecture-analysis-5/</link>
		<comments>http://www.os2ora.com/exadata-architecture-analysis-5/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 13:20:53 +0000</pubDate>
		<dc:creator>Kaya</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[数据库性能调优]]></category>
		<category><![CDATA[系统架构]]></category>
		<category><![CDATA[DB2]]></category>
		<category><![CDATA[MDC]]></category>
		<category><![CDATA[Multi Dimensional Clustering]]></category>
		<category><![CDATA[SI]]></category>
		<category><![CDATA[Smart Scan]]></category>
		<category><![CDATA[Storage Index]]></category>
		<category><![CDATA[Storage Indexing]]></category>

		<guid isPermaLink="false">http://www.os2ora.com/exadata-architecture-analysis-5/</guid>
		<description><![CDATA[Exadata上另一个聪明的软件设计是实现了storage index.
如果Exadata给你的印象就是有很强大的硬件，却不会利用传统的性能优化方法，比如索引，去加快查询速度的话，那么Storage Index的出现或许会改变你的这种观念。而且，storage index是完全自动化的，它甚至不需要人工的干涉就能工作得很好......]]></description>
			<content:encoded><![CDATA[<p>Kaya 发表于 <a href="http://www.os2ora.com/">os2ora.com</a></p>
<p>Exadata上另一个聪明的软件设计是实现了storage index.</p>
<p>另一篇白皮书中有对Storage Index的一个描述 <a href="http://www.oracle.com/us/solutions/datawarehousing/039572.pdf" target="_blank">A Technical Overview of the Sun Oracle Exadata Storage Server and Database Machine</a></p>
<blockquote><p class="Default" style="margin: 0cm 0cm 0pt"><font color="#000000"><font face="Arial"><b><span lang="EN-US" style="font-size: 8pt">Storage Indexing </span></b><span lang="EN-US" style="font-size: 8pt"></span></font></font></p>
</p>
</p>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: &quot;Garamond&quot;,&quot;serif&quot;; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: garamond"><font color="#000000" size="3">Storage Indexes are a very powerful capability provided in Exadata storage that helps avoid I/O operations. The Exadata Storage Server Software creates and maintains a Storage Index in Exadata memory. The Storage Index keeps track of minimum and maximum values of columns for tables stored on that cell. When a query specifies a WHERE clause, but before any I/O is done, the Exadata software examines the Storage Index to determine if rows with the specified column value exists in the cell by comparing the column value to the minimum and maximum values maintained in the Storage Index. If the column value is outside the minimum and maximum range, scan I/O for that query is avoided. Many SQL Operations will run dramatically faster because large numbers of I/O operations are automatically replaced by a few in-memory lookups. To minimize operational overhead, Storage Indexes are created and maintained transparently and automatically by the Exadata Storage Server Software.</font></span></p>
</blockquote>
<p>如果Exadata给你的印象就是有很强大的硬件，却不会利用传统的性能优化方法，比如索引，去加快查询速度的话，那么Storage Index的出现或许会改变你的这种观念。而且，storage index是完全自动化的，它甚至不需要人工的干涉就能工作得很好。</p>
<p>Smart Scan之所以冠名以Smart，是因为它在扫描数据的时候同时做过滤操作，只把必需的数据返回给数据服务器端；而Storage Index在这里却直接避免了对Disks的访问，其Smart的程度与Smart Scan相比，或许已经到了超凡脱俗的境界了。</p>
<p>如果真要找一个类比的话，DB2中有个特性或许可以与Storage Index做下对比，那就是<a href="http://www.research.ibm.com/mdc/index.html" target="_blank">Multi Dimensional Clustering</a>. 仔细阅读下MDC的介绍，两者真的有异曲同工之妙。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.os2ora.com/exadata-architecture-analysis-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exadata V2 架构分析 (4)</title>
		<link>http://www.os2ora.com/exadata-architecture-analysis-4/</link>
		<comments>http://www.os2ora.com/exadata-architecture-analysis-4/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 13:12:01 +0000</pubDate>
		<dc:creator>Kaya</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[数据库性能调优]]></category>
		<category><![CDATA[系统架构]]></category>
		<category><![CDATA[EHCC]]></category>
		<category><![CDATA[Exadata Hybrid Columnar Compression]]></category>
		<category><![CDATA[HCC]]></category>
		<category><![CDATA[Smart Scan]]></category>
		<category><![CDATA[白皮书]]></category>

		<guid isPermaLink="false">http://www.os2ora.com/exadata-architecture-analysis-4/</guid>
		<description><![CDATA[下一个要出场的是HCC, Hybrid Columnar Compression. 目前它是Exadata上面才有的一个特性。
在Exadata V2 架构分析 (1)中，曾提到“在软件设计上，还有另一个重头戏，它更是大大的利用起了存贮节点上的CPU处理能力，同时还能减少对带宽的争用”。Exadata的很多设计，或许从根本上讲，就在于充分利用起存贮节点上的处理能力，Smart Scan和这里所要提及的HCC，就是两个典型的代表了。HCC中文翻译过来或许就叫做混合列压缩，它是在单纯的行存贮和列存贮之间取得的一个折衷......]]></description>
			<content:encoded><![CDATA[<p>Kaya 发表于 <a href="http://www.os2ora.com/">os2ora.com</a></p>
<p>下一个要出场的是HCC, Hybrid Columnar Compression. 目前它是Exadata上面才有的一个特性，所以又叫做Exadata Hybrid Columnar Compression。</p>
<p>在<a href="http://www.os2ora.com/exadata-architecture-analysis-1/" target="_blank">Exadata V2 架构分析 (1)</a>中，曾提到“<span class="Apple-style-span" style="word-spacing: 0px; font: medium simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 12px; color: rgb(85,85,85); font-family: verdana, &#39;BitStream vera Sans&#39;, helvetica, sans-serif; text-align: left">在软件设计上，还有另一个重头戏，它更是大大的利用起了存贮节点上的CPU处理能力，同时还能减少对带宽的争用”。Exadata的很多设计，或许从根本上讲，就在于充分利用起存贮节点上的处理能力，Smart Scan和这里所要提及的HCC，就是两个典型的代表了。HCC中文翻译过来或许就叫做混合列压缩，它是在单纯的行存贮和列存贮之间取得的一个折衷。</span></span></p>
<p><span class="Apple-style-span" style="word-spacing: 0px; font: medium simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 12px; color: rgb(85,85,85); font-family: verdana, &#39;BitStream vera Sans&#39;, helvetica, sans-serif; text-align: left">一个比较好的参考文档是这篇白皮书<a href="http://www.oracle.com/technology/products/bi/db/exadata/pdf/ehcc_twp.pdf" target="_blank">Exadata Hybrid Columnar Compression</a>.</span></span></p>
<p><a href="http://www.os2ora.com/wp-content/uploads/2010/06/image.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="202" alt="image" src="http://www.os2ora.com/wp-content/uploads/2010/06/image_thumb.png" width="701" border="0" /></a> </p>
<p><span class="Apple-style-span" style="word-spacing: 0px; font: medium simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 12px; color: rgb(85,85,85); font-family: verdana, &#39;BitStream vera Sans&#39;, helvetica, sans-serif; text-align: left">上图中，典型地，4个8KB的blocks被当成一个Compression Unit。在这个CU所能存贮的rows中，每个column被分开存贮。可以想像到，每个column里的内容是很相似的，如果与row之间的内容做比较的话。于是，对每个column的内容进行压缩，会得到很好的压缩率。根据压缩算法的不同，Oracle提供了四种不同的压缩等级，详见上面提到的白皮书，这里就不详细列出了。</span></span></p>
<p><span class="Apple-style-span" style="word-spacing: 0px; font: medium simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 12px; color: rgb(85,85,85); font-family: verdana, &#39;BitStream vera Sans&#39;, helvetica, sans-serif; text-align: left">到底EHCC的压缩率可以达到多少呢？白皮书中提到两个数据，可以做为参考，对于Warehouse Compression，有10x的压缩率，对于Archive Compression，有15x的压缩率。</span></span></p>
<p><span class="Apple-style-span" style="word-spacing: 0px; font: medium simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 12px; color: rgb(85,85,85); font-family: verdana, &#39;BitStream vera Sans&#39;, helvetica, sans-serif; text-align: left"></span></span></p>
<p><span class="Apple-style-span" style="word-spacing: 0px; font: medium simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 12px; color: rgb(85,85,85); font-family: verdana, &#39;BitStream vera Sans&#39;, helvetica, sans-serif; text-align: left">EHCC相对于单纯的Column Compression而言，有一个极其突出的优点，这点是不得不提及的。当进行行级访问数据时，如根据rowid返回一行数据，EHCC只要一个IO就够了，不管所访问的表有多少列，而对于单纯的Column Compression而言，对于每个Column，都必须有一个IO操作。那么，随着表设计的复杂，如一个表拥有成百上千列，两种存贮方式的性能就能体现出成百上千倍的差距了。</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.os2ora.com/exadata-architecture-analysis-4/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>无奈的DBA</title>
		<link>http://www.os2ora.com/helpless-dba/</link>
		<comments>http://www.os2ora.com/helpless-dba/#comments</comments>
		<pubDate>Sun, 30 May 2010 15:28:13 +0000</pubDate>
		<dc:creator>Kaya</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[数据库性能调优]]></category>
		<category><![CDATA[系统架构]]></category>
		<category><![CDATA[DBA]]></category>
		<category><![CDATA[DSS]]></category>
		<category><![CDATA[Index]]></category>
		<category><![CDATA[容量规划]]></category>
		<category><![CDATA[架构]]></category>

		<guid isPermaLink="false">http://www.os2ora.com/helpless-dba/</guid>
		<description><![CDATA[在检查客户的代码中，有时会深刻地感觉到原代码编写者在调试代码时的无奈。
这使我想起以前调试代码时的经历。一个SQL迟迟不返回结果，一小时过去了，又一小时过去了...... 于是，想了好多调优的方法，调整系统参数，为这个SQL建立很多Index，加上各种各样的Hint ...... 
于是，现在在代码中看到似曾相识的/*+ index(t_xx, idx_xx) */时，有时会发自内心的笑了，同时，轻巧地把里面的+号删掉了，我就让这些个hint不起作用，不强迫CBO走index了，结果当然是CBO选择了Hash Join，而不是原代码编写者指定的Nested Loop，于是，执行速度嗖一下上去了。
有另一个有趣的事情......]]></description>
			<content:encoded><![CDATA[<p>Kaya 发表于 <a href="http://www.os2ora.com/">os2ora.com</a></p>
<p>在检查客户的代码中，有时会深刻地感觉到原代码编写者在调试代码时的无奈。</p>
<p>这使我想起以前调试代码时的经历。一个SQL迟迟不返回结果，一小时过去了，又一小时过去了&#8230;&#8230; 于是，想了好多调优的方法，调整系统参数，为这个SQL建立很多Index，加上各种各样的Hint &#8230;&#8230; </p>
<p>于是，现在在代码中看到似曾相识的/*+ index(t_xx, idx_xx) */时，有时会发自内心的笑了，同时，轻巧地把里面的+号删掉了，我就让这些个hint不起作用，不强迫CBO走index了，结果当然是CBO选择了Hash Join，而不是原代码编写者指定的Nested Loop，于是，执行速度嗖一下上去了。</p>
<p>还有另一个有趣的事情，对大表的操作DSS查询或DML操作，检查客户的执行计划，无一例外地没有用并行查询或者并行DML，当然，里面会用到很多类似上面的/*+ index(t_xx, idx_xx) */。于是，心里很纳闷，这样跑DSS查询或DML操作，要跑到啥时候才跑完啊？有趣的地方在于，发现了原代码编写者的一个可能的workaround，对大表进行分割分片处理，一次跑不完，我跑它个几百上千次还可以吧。很聪明的做法，不过也感觉到一阵阵深深的无奈。</p>
<p>不可否以地，很多客户有很复杂的业务逻辑要处理，DBA们和开发者们也很聪明地运用着Oracle的技术。编写的代码质量其实也是可圈可点的。不过，在代码实现与现实世界之间，我们却不得不面对一个折衷，优雅的代码，在糟糕的机器配置之前，只能无能为力，于是，过度的调优也就理所当然，顺理成章的成为了主流。</p>
<p>或许，我们的DBA们要主动地进行呐喊；或许，我们还需要有这样的职位，能够从大局上对系统进行规划，包括对系统硬件的容量规划，系统软件实现上的总体设计，最佳实践上的运用等等；或许，也应该是架构师工作的一部分？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.os2ora.com/helpless-dba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exadata V2 架构分析 (3)</title>
		<link>http://www.os2ora.com/exadata-architecture-analysis-3/</link>
		<comments>http://www.os2ora.com/exadata-architecture-analysis-3/#comments</comments>
		<pubDate>Thu, 20 May 2010 12:14:37 +0000</pubDate>
		<dc:creator>Kaya</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[数据库性能调优]]></category>
		<category><![CDATA[系统架构]]></category>
		<category><![CDATA[Cell Flash Cache]]></category>
		<category><![CDATA[Flash Cache]]></category>
		<category><![CDATA[IOPS]]></category>
		<category><![CDATA[MBPS]]></category>
		<category><![CDATA[混合负载]]></category>

		<guid isPermaLink="false">http://www.os2ora.com/exadata-architecture-analysis-3/</guid>
		<description><![CDATA[关于Cell Flash Cache，或许大家都余兴未尽，例如：
1. 一个真正的生产系统，真的需要1,000,000 IOPS吗？
2. Cell Flash Cache对用户带来的真正的好处在哪里？
假设用户的逻辑IOPS达到1,000,000 IO/s. buffer cache命中率为98%。则落在Cell Flash Cache中的IOPS为20,000次......]]></description>
			<content:encoded><![CDATA[<p>Kaya 发表于 <a href="http://www.os2ora.com/">os2ora.com</a></p>
<p>关于Cell Flash Cache，好象大家都余兴未尽，例如：    <br />1. 一个真正的生产系统，真的需要1,000,000 IOPS吗？     <br />2. Cell Flash Cache对用户带来的真正的好处在哪里？</p>
<p>假设用户的<strong><em>逻辑IOPS</em></strong>达到1,000,000 IO/s. buffer cache命中率为98%。则落在Cell Flash Cache中的IOPS为20,000次。这个数据对于1/4配，即一个quarter的Exadata来说，当然是小菜一碟，不过对于一般磁盘呢？一般的磁盘每秒大约为300 IOPS，这意味着需要有20,000/300=66个磁盘，这已经是一个不低的配置了。</p>
<p>再进一步考虑，如果系统想支持混合负载，即系统同时支持数据仓库查询和OLTP在线系统。那么这时OLTP的性能将会受到严重影响。要知道，数据仓库查询要求的MBPS，而OLTP要求的则是IOPS，这两个指标是会相互影响的，用户一般考虑的是OLTP优先。甚至于出现一种情形，我不清楚下面这种情况会多普遍：</p>
<blockquote><p>在IO受限的情形下，不敢对OLAP查询启用并行，由于不启用并行，OLAP查询很久不返回结果，进一步地，用户会在表上建更多的索引来“优化”这些OLAP查询。最终，整个混合型的系统就变成了一个类似OLTP的系统了。</p>
</blockquote>
<p>在这种情形下，Cell Flash Cache或许会带有性能上的实质提升，通过Flash Cache会大大提升OLTP的查询性能，同时，后端的磁盘和Flash Cache会<em><strong>一起</strong></em>提供足够的带宽给OLAP查询(很聪明吧)，这在硬件上保证了两者并存的可能性。另一方面，由于在IO上的财大气粗，对原有OLAP的过度优化终于可以停止了，系统设计因些会回归简单，与此对应地，系统维护成本也会大大降低。</p>
<p>或许这是Cell Flash Cache可能给大家带来的一个很诱人的地方。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.os2ora.com/exadata-architecture-analysis-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exadata V2 架构分析 (2)</title>
		<link>http://www.os2ora.com/exadata-architecture-analysis-2/</link>
		<comments>http://www.os2ora.com/exadata-architecture-analysis-2/#comments</comments>
		<pubDate>Sun, 16 May 2010 16:30:39 +0000</pubDate>
		<dc:creator>Kaya</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[数据库性能调优]]></category>
		<category><![CDATA[系统架构]]></category>
		<category><![CDATA[buffer cache]]></category>
		<category><![CDATA[Buffer Hit Ratio]]></category>
		<category><![CDATA[Flash Cache]]></category>
		<category><![CDATA[IOPS]]></category>
		<category><![CDATA[MBPS]]></category>
		<category><![CDATA[OLTP]]></category>
		<category><![CDATA[Smart Scan]]></category>

		<guid isPermaLink="false">http://www.os2ora.com/exadata-architecture-analysis-2/</guid>
		<description><![CDATA[既然提到了Flash Cache,如果不提下对OLTP的提速好象会缺少点什么。对OLTP系统而言，缓存是一个极其重要的设计，不管是数据库节点上的内存上的Buffer Cache，还是存贮节点上的Flash Cache（Exadata)，还有数据库节点上的Flash Cache(某些平台，如Linux)......]]></description>
			<content:encoded><![CDATA[<p>Kaya 发表于 <a href="http://www.os2ora.com/">os2ora.com</a></p>
<p>既然提到了Flash Cache,如果不提下对OLTP的提速好象会缺少点什么。对OLTP系统而言，缓存是一个极其重要的设计，不管是数据库节点上的内存上的Buffer Cache，还是存贮节点上的Flash Cache（Exadata)，还有数据库节点上的Flash Cache(某些平台，如Linux)。</p>
<p>前几天在<a href="http://www.eygle.com" target="_blank">Eygle</a>的性能调优课程上听过他提过的一句话，缓存为王（致敬，呵呵），深以为然，这应该是他极其重要的实践总结，对于OLTP系统而言，这真是一点不为过。</p>
<p>下面的表格列出了一个实际场景，分别测试了不同的buffer 命中率和引入Flash Cache之后的性能变化。</p>
<table cellspacing="0" cellpadding="2" width="987" border="1">
<tbody>
<tr>
<td valign="top" width="59">Cache</td>
<td valign="top" width="89">Executions</td>
<td valign="top" width="86">Buffer Hit %</td>
<td valign="top" width="90">CPU Time (s)</td>
<td valign="top" width="100">user IO time (s)</td>
<td valign="top" width="108">Elapsed Time</td>
<td valign="top" width="134">total Elapsed Time (s)</td>
<td valign="top" width="62">CPU %</td>
<td valign="top" width="106">response time</td>
<td valign="top" width="151">SpeedUp Factor</td>
</tr>
<tr>
<td valign="top" width="67">Buffer Cache</td>
<td valign="top" width="96">30000</td>
<td valign="top" width="85">85</td>
<td valign="top" width="89">70</td>
<td valign="top" width="99">4082</td>
<td valign="top" width="106">00:02:20</td>
<td valign="top" width="133">4138</td>
<td valign="top" width="64">3</td>
<td valign="top" width="106">0.138</td>
<td valign="top" width="149">1</td>
</tr>
<tr>
<td valign="top" width="70">Flash Cache</td>
<td valign="top" width="100">30000</td>
<td valign="top" width="85">85</td>
<td valign="top" width="89">69</td>
<td valign="top" width="98">265</td>
<td valign="top" width="105">00:00:12</td>
<td valign="top" width="132">323</td>
<td valign="top" width="65">36</td>
<td valign="top" width="106">0.011</td>
<td valign="top" width="149">13</td>
</tr>
<tr>
<td valign="top" width="71">Buffer Cache</td>
<td valign="top" width="101">30000</td>
<td valign="top" width="85">100</td>
<td valign="top" width="89">19</td>
<td valign="top" width="100">0</td>
<td valign="top" width="111">00:00:02</td>
<td valign="top" width="142">26</td>
<td valign="top" width="69">61</td>
<td valign="top" width="111">0.001</td>
<td valign="top" width="165">158</td>
</tr>
</tbody>
</table>
<p>上面的三行对应的OLTP负载是相同的，但总的执行时间却是大大不同的，从2分多钟到10几秒到2秒。唯一的区别就在于Cell Flash Cache, Buffer Cache 的介入。</p>
<p>上面这些数据起码可以得出几个结论：</p>
<p>1. Buffer Cache会减少CPU Time,但Cell Flash Cache不会。这从另一个方面说明，IO调度是需要CPU的。</p>
<p>2. Cell Flash Cache和Buffer Cache都大大减少了User IO Time。最终的结果就是大大提升了响应时间，例如上面我们得到了从13倍到158倍的性能提升。</p>
<p>3. Cell Flash Cache和Buffer Cache都提高了DB节点的CPU利用率。例如上面我们的CPU利用率从3%提高到36%和61%。</p>
<p>Exadata V2宣传的一个令人惊诧的数字之一是每秒钟一百万个8K的随机IO。很恐怖吧，1,000,000 IO/s.</p>
<p>其实，如果只是进行读操作而没有写操作的话，这个数字会更令人恐怖。下面是一个截图。把里面的峰值(300k)除以3乘以14，就得到整个机器14个cell可以达到的一个IOPS: 1.4 million IO/s.</p>
<p><a href="http://www.os2ora.com/wp-content/uploads/2010/05/iops.jpg"><img title="iops" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="233" alt="iops" src="http://www.os2ora.com/wp-content/uploads/2010/05/iops_thumb.jpg" width="804" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.os2ora.com/exadata-architecture-analysis-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>利用Instance Caging实现数据库服务器的资源整合</title>
		<link>http://www.os2ora.com/database-instance-caging-server-consolidation/</link>
		<comments>http://www.os2ora.com/database-instance-caging-server-consolidation/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 08:44:04 +0000</pubDate>
		<dc:creator>Kaya</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[Oracle管理与维护]]></category>
		<category><![CDATA[系统架构]]></category>
		<category><![CDATA[Instance Caging]]></category>
		<category><![CDATA[Partition]]></category>
		<category><![CDATA[Resource Manager]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[新特性]]></category>

		<guid isPermaLink="false">http://www.os2ora.com/database-instance-caging-server-consolidation/</guid>
		<description><![CDATA[随着业务的发展，IT部门的服务器数量会越来越庞大，另一方面，这些服务器的利用率却得不到充分利用，于是，服务器的资源整合就被提上了议事日程，这方面的相应的解决方案一般有
Hardware Partitions, 
O/S Workload Managers, 
Virtualization
等等。
在11gR2中，Oracle也提供了一种简单有效的方法实现对服务器资源的整合，这就是Instance Caging技术......]]></description>
			<content:encoded><![CDATA[<p>Kaya 发表于 <a href="http://www.os2ora.com/">os2ora.com</a></p>
<p>随着业务的发展，IT部门的服务器数量会越来越庞大，另一方面，这些服务器的利用率却得不到充分利用，于是，服务器的资源整合就被提上了议事日程，这方面的相应的解决方案一般有</p>
<ol>
<li>Hardware Partitions, </li>
<li>O/S Workload Managers, </li>
<li>Virtualization</li>
<li>等等。</li>
</ol>
<p>在11gR2中，Oracle也提供了一种简单有效的方法实现对服务器资源的整合，这就是Instance Caging技术。</p>
<p>下面的描述实际上来源于Oracle发表的一篇白皮书，下载地址</p>
<p><a href="http://www.oracle.com/technology/products/manageability/database/pdf/owp_instance_caging.pdf">http://www.oracle.com/technology/products/manageability/database/pdf/owp_instance_caging.pdf</a></p>
<p>下面是两种应用资源整合的场合：</p>
<p>1. 对性能要求不严格的数据库，一般我们可以把多个数据库放在同个服务器上，没有突发负载的情况下，所有数据库共享服务器的资源，与把服务器的资源划分隔离给不同的数据库相比，这一方面可以充分利用服务器的计算资源，另一方面也省去了管理的开销。这时，要处理的主要问题在于当某个数据库有突发的工作负载的时候，我们不能让这个数据库占用整台机器的资源，以防止对其它数据库资源的争用。这时，我们说出现了资源过度分配的问题。</p>
<p>举个例子来说，一个有4个CPU的系统，运行着4个数据库，我们可以规定任一个数据库用CPU的最高额度是3个CPU。于是，当4个数据库同时处于业务高峰时，理论上的主机最高压力就会达到12CPU。不过，当启用Instance Caging之后，每个数据库能运行的进程数将受到控制，OS根据每个数据库能运行的进程数分配给每个数据库相应的CPU资源。这样，多个同时处于业务高峰的数据库将会根据预设的最高额度值共享服务器的资源。</p>
<p>2. 对性能要求苛刻的数据库，一般而言，我们希望对CPU进行分区，分配给不同的数据库不同的CPU数目，这样不同的数据库之间就不会造成相互的影响。比如有4个CPU，两个数据库，那么我们可以为第一个数据库分配1个CPU，第二个数据库分配3个CPU。</p>
<p>那么，如何启用Instance Caging呢？简单的两步：</p>
<p>1. 设置cpu_count</p>
<p>2. 启用任何一个Resource Manager Plan.</p>
<p>下面是一个实际案例，利用Instance Caging实现对服务器资源的分区的一个测试结果。</p>
<p><a href="http://www.os2ora.com/wp-content/uploads/2009/12/image5.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="396" alt="image" src="http://www.os2ora.com/wp-content/uploads/2009/12/image_thumb5.png" width="566" border="0" /></a> </p>
<p>可以看到，Instance Caging还是实现了它所宣称的partition功能的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.os2ora.com/database-instance-caging-server-consolidation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Oracle Database未来的发展方向– Exadata (3)</title>
		<link>http://www.os2ora.com/oracle-database-future-exadata-3/</link>
		<comments>http://www.os2ora.com/oracle-database-future-exadata-3/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 13:59:53 +0000</pubDate>
		<dc:creator>Kaya</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[数据库性能调优]]></category>
		<category><![CDATA[系统架构]]></category>
		<category><![CDATA[balanced system]]></category>
		<category><![CDATA[bottleneck]]></category>
		<category><![CDATA[Infiniband]]></category>
		<category><![CDATA[Smart Scan]]></category>
		<category><![CDATA[云计算]]></category>
		<category><![CDATA[发展方向]]></category>
		<category><![CDATA[高性能]]></category>

		<guid isPermaLink="false">http://www.os2ora.com/oracle-database-future-exadata-3/</guid>
		<description><![CDATA[前面分析的主要是Exadata如何高效地进行计算。通过在存贮结点加入数据处理能力，Exdata不仅大大地提升了处理性能，而且解决了以前的Oracle架构上可能存在的CPU和网络的瓶颈问题。

一个Database Machine有8个DB节点，14个Cell (存贮)结点。在V1版本中，一个Cell可以提供1GB/s的带宽，14个Cell节点总共能提供的带宽为14GB/s。对于8个DB节点，每个节点都是两个CPU，每个CPU 4 个Cores。所以一个Database Machine中DB节点总共有64个Cores。

8 DB Nodes + 14 Cell Nodes = Balanced System

这是一个经过实践证明过的平衡的一个配置。
记得今年9月底和阿里巴巴的DBA的一个关于Exadata的交流活动上，新成立的阿里云的同事也到场了。Exadata的架构引起了大家的共鸣，会后一个反应是，有人觉得Exadata与云计算有些异曲同工之妙。其实这也难怪，Exadata本来就是一个关注大规模并行计算的集群系统。特别是智能的存贮节点的引入，更使得每个存贮节点能够分担一个大计算里的一小部分，并且这些智能的存贮节点还有线性的可扩展性，当需要更好的性能时，只要简单地相应增加存贮节点和/或DB节点就可以实现了。这难怪不是一个“云计算”的例子吗......]]></description>
			<content:encoded><![CDATA[<p>Kaya 发表于 <a href="http://www.os2ora.com">os2ora.com</a></p>
<p>前面分析的主要是Exadata如何高效地进行计算。通过在存贮结点加入数据处理能力，Exdata不仅大大地提升了处理性能，而且解决了以前的Oracle架构上可能存在的CPU和网络的瓶颈问题。</p>
<p>一个Database Machine有8个DB节点，14个Cell (存贮)结点。在V1版本中，一个Cell可以提供1GB/s的带宽，14个Cell节点总共能提供的带宽为14GB/s。对于8个DB节点，每个节点都是两个CPU，每个CPU 4 个Cores。所以一个Database Machine中DB节点总共有64个Cores。</p>
<p>8 DB Nodes + 14 Cell Nodes = Balanced System</p>
<p>这是一个经过实践证明过的平衡的一个配置。对于一个典型的DW并行查询，类似我们在第一篇文章里提到的，也就是下面的这个查询:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> a<span style="color: #66cc66;">.</span>no<span style="color: #66cc66;">,</span>
       sum<span style="color: #66cc66;">&#40;</span>case
             when a<span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'A'</span><span style="color: #66cc66;">&#41;</span> then
              a<span style="color: #66cc66;">.</span>score <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">2</span>
             else
              a<span style="color: #66cc66;">.</span>score <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">5</span>
           end<span style="color: #66cc66;">&#41;</span> score1<span style="color: #66cc66;">,</span>
       sum<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">....</span>
           <span style="color: #66cc66;">...</span>
              <span style="color: #66cc66;">&#41;</span> scoreN
  <span style="color: #993333; font-weight: bold;">FROM</span> fact_table a
 <span style="color: #993333; font-weight: bold;">GROUP</span> <span style="color: #993333; font-weight: bold;">BY</span> a<span style="color: #66cc66;">.</span>no
;</pre></div></div>

<p>在运行的大部分时间，DB节点的64个Cores保持100%的利用率，14个Cell节点的总IO吞吐量保持在14GB/s上。</p>
<p>记得今年9月底和阿里巴巴的DBA的一个关于Exadata的交流活动上，新成立的阿里云的同事也到场了。Exadata的架构引起了大家的共鸣，会后一个反应是，有人觉得Exadata与云计算有些异曲同工之妙。其实这也难怪，Exadata本来就是一个关注大规模并行计算的集群系统。特别是智能的存贮节点的引入，更使得每个存贮节点能够分担一个大计算里的一小部分，并且这些智能的存贮节点还有线性的可扩展性，当需要更好的性能时，只要简单地相应增加存贮节点和/或DB节点就可以实现了。这难道不是一个“云计算”的例子吗？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.os2ora.com/oracle-database-future-exadata-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oracle Database未来的发展方向 – Exadata (2)</title>
		<link>http://www.os2ora.com/oracle-database-future-exadata-2/</link>
		<comments>http://www.os2ora.com/oracle-database-future-exadata-2/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 08:19:46 +0000</pubDate>
		<dc:creator>Kaya</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[数据库性能调优]]></category>
		<category><![CDATA[系统架构]]></category>
		<category><![CDATA[balanced system]]></category>
		<category><![CDATA[bottleneck]]></category>
		<category><![CDATA[Infiniband]]></category>
		<category><![CDATA[Smart Scan]]></category>
		<category><![CDATA[发展方向]]></category>
		<category><![CDATA[高性能]]></category>

		<guid isPermaLink="false">http://www.os2ora.com/oracle-database-future-exadata-2/</guid>
		<description><![CDATA[下一个问题，Exadata如何解决CPU方面的瓶颈呢？ 

在Exadata之前，我想无非两种思路，第一在原来节点上用更多更强的CPU，第二采用更多的RAC节点。 

不过在Exadata的架构中，CPU的瓶颈已经从基本上得到很大的缓解，这就是存贮节点上CPU处理能力的介入......]]></description>
			<content:encoded><![CDATA[<p>Kaya 发表于 <a href="http://www.os2ora.com">os2ora.com</a></p>
<p>下一个问题，Exadata如何解决CPU方面的瓶颈呢？</p>
<p>在Exadata之前，我想无非两种思路，第一在原来节点上用更多更强的CPU，第二采用更多的RAC节点。</p>
<p>不过在Exadata的架构中，CPU的瓶颈已经从基本上得到很大的缓解，这就是存贮节点上CPU处理能力的介入。</p>
<p>还是以一个实际SQL为例:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> t0<span style="color: #66cc66;">.</span>id
   <span style="color: #993333; font-weight: bold;">FROM</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> id
 <span style="color: #993333; font-weight: bold;">FROM</span> t0
    <span style="color: #993333; font-weight: bold;">WHERE</span> id <span style="color: #993333; font-weight: bold;">LIKE</span> <span style="color: #ff0000;">'%54234245%'</span>
  <span style="color: #66cc66;">&#41;</span> t0<span style="color: #66cc66;">,</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> id
     <span style="color: #993333; font-weight: bold;">FROM</span> t1
    <span style="color: #993333; font-weight: bold;">WHERE</span> id <span style="color: #993333; font-weight: bold;">LIKE</span> <span style="color: #ff0000;">'%54234245%'</span>
  <span style="color: #66cc66;">&#41;</span> t1<span style="color: #66cc66;">,</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> id
     <span style="color: #993333; font-weight: bold;">FROM</span> t2
    <span style="color: #993333; font-weight: bold;">WHERE</span> id <span style="color: #993333; font-weight: bold;">LIKE</span> <span style="color: #ff0000;">'%54234245%'</span>
  <span style="color: #66cc66;">&#41;</span> t2<span style="color: #66cc66;">,</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> id
     <span style="color: #993333; font-weight: bold;">FROM</span> t3
    <span style="color: #993333; font-weight: bold;">WHERE</span> id <span style="color: #993333; font-weight: bold;">LIKE</span> <span style="color: #ff0000;">'%54234245%'</span>
  <span style="color: #66cc66;">&#41;</span> t3<span style="color: #66cc66;">,</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> id
     <span style="color: #993333; font-weight: bold;">FROM</span> t4
    <span style="color: #993333; font-weight: bold;">WHERE</span> id <span style="color: #993333; font-weight: bold;">LIKE</span> <span style="color: #ff0000;">'%54234245%'</span>
  <span style="color: #66cc66;">&#41;</span> t4<span style="color: #66cc66;">,</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> id
     <span style="color: #993333; font-weight: bold;">FROM</span> t5
    <span style="color: #993333; font-weight: bold;">WHERE</span> id <span style="color: #993333; font-weight: bold;">LIKE</span> <span style="color: #ff0000;">'%54234245%'</span>
  <span style="color: #66cc66;">&#41;</span> t5<span style="color: #66cc66;">,</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> id
     <span style="color: #993333; font-weight: bold;">FROM</span> t6
    <span style="color: #993333; font-weight: bold;">WHERE</span> id <span style="color: #993333; font-weight: bold;">LIKE</span> <span style="color: #ff0000;">'%54234245%'</span>
  <span style="color: #66cc66;">&#41;</span> t6
  <span style="color: #993333; font-weight: bold;">WHERE</span>
    t0<span style="color: #66cc66;">.</span>id<span style="color: #66cc66;">=</span>t1<span style="color: #66cc66;">.</span>id
<span style="color: #993333; font-weight: bold;">AND</span> t0<span style="color: #66cc66;">.</span>id<span style="color: #66cc66;">=</span>t2<span style="color: #66cc66;">.</span>id
<span style="color: #993333; font-weight: bold;">AND</span> t0<span style="color: #66cc66;">.</span>id<span style="color: #66cc66;">=</span>t3<span style="color: #66cc66;">.</span>id
<span style="color: #993333; font-weight: bold;">AND</span> t0<span style="color: #66cc66;">.</span>id<span style="color: #66cc66;">=</span>t4<span style="color: #66cc66;">.</span>id
<span style="color: #993333; font-weight: bold;">AND</span> t0<span style="color: #66cc66;">.</span>id<span style="color: #66cc66;">=</span>t5<span style="color: #66cc66;">.</span>id
<span style="color: #993333; font-weight: bold;">AND</span> t0<span style="color: #66cc66;">.</span>id<span style="color: #66cc66;">=</span>t6<span style="color: #66cc66;">.</span>id
;</pre></div></div>

<p>下面是一个可能的结果，第一行的数据是没有启用Smart Scan技术的结果，第二行是启用了Smart Scan的结果。</p>
<table border="1" cellspacing="0" cellpadding="2" width="563">
<tbody>
<tr>
<td width="102" valign="top">Type</td>
<td width="52" valign="top">Elapsed</td>
<td width="76" valign="top">DB CPU%</td>
<td width="88" valign="top">IO(MB/s)</td>
<td width="100" valign="top">Cell CPU%</td>
<td width="143" valign="top">Network (MB/s)</td>
</tr>
<tr>
<td width="102" valign="top">pre-Exadata</td>
<td width="52" valign="top">21s</td>
<td width="76" valign="top">99</td>
<td width="88" valign="top">400</td>
<td width="100" valign="top">1</td>
<td width="143" valign="top">400</td>
</tr>
<tr>
<td width="102" valign="top">Exadata</td>
<td width="52" valign="top">11s</td>
<td width="76" valign="top">80</td>
<td width="88" valign="top">700</td>
<td width="100" valign="top">50</td>
<td width="143" valign="top">8</td>
</tr>
</tbody>
</table>
<p> </p>
<p>第一行比较容易理解，存贮阵列/结点的数据以400 MB/s的速度通过Storage network传输到DB结点进行，DB CPU的利用率达到了99%。</p>
<p>显而易见，这时瓶颈出现在DB结点的CPU上，如果启用了Smart Scan，则Exadata会在存贮结点上首先对数据进行处理(存贮结点的CPU利用率为50%)，然后把其中有效的数据以8 MB/s的速度传输到DB结点进行处理，这时DB结点的CPU利用率下降为80%。SQL的完成时间却变为原来的一半。</p>
<p>Exadata在这里做了哪些事情呢？</p>
<p>1. 只进行有效数据的传输，这里，只传输满足条件id like &#8216;%54234245%&#8217;的7个表的指定列 id 的数据。</p>
<p>2. 解决了原来pre-Exadata可能碰到的网络瓶颈问题</p>
<p>3. 分担了DB 节点的工作负载</p>
]]></content:encoded>
			<wfw:commentRss>http://www.os2ora.com/oracle-database-future-exadata-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

