<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>a db thinker's home</title>
	
	<link>http://www.dbthink.com</link>
	<description>An Oracle DBA's thought about DB,Web Architect etc..</description>
	<lastBuildDate>Thu, 02 Sep 2010 09:56:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/dbthink" /><feedburner:info uri="dbthink" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://superfeedr.com/hubbub" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/dbthink" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fdbthink" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>你需要知道的关于NoSQL数据库的10件事</title>
		<link>http://feedproxy.google.com/~r/dbthink/~3/rioKacbELYw/</link>
		<comments>http://www.dbthink.com/?p=630#comments</comments>
		<pubDate>Sun, 29 Aug 2010 07:19:03 +0000</pubDate>
		<dc:creator>jametong</dc:creator>
				<category><![CDATA[Translation]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[Big Data]]></category>
		<category><![CDATA[elastic scaling]]></category>
		<category><![CDATA[RDBMS]]></category>

		<guid isPermaLink="false">http://www.dbthink.com/?p=630</guid>
		<description><![CDATA[<p>你需要知道的关于NoSQL数据库的10件事</p>
<p>By Guy Harrison , Translated By Jametong</p>
<p>关系数据模型已经流行了几十年了,但是一种新型的数据库(即NoSQL)正在吸引各大企业的关注.下面是对其优势与劣势的一个简单总结.</p>
<p> 在过去的1/4世纪中,关系型数据库(RDBMS)一直是数据库管理系统的主导模型.但是,今天,非关系型,”云,”或者”NoSQL”数据库正以数据库管理系统的替代模型而获得认知.在本文中,我们将考察这些非关系型NoSQL数据库的10个关键因素:最重要的5个优势以及5个挑战.</p>
<p>  可以通过此链接下载本文的PDF格式.</p>
<p style="font-weight:bold;">NoSQL的5个优势</p>
<p style="font-weight:bold;">1. 弹性扩展</p>
<p>  多年来,数据库管理员一直依赖于向上扩展(scale up)－随着数据库负载的增加购买更大的数据库服务器―而不是向外扩展－随着负载的增加将数据库分不到多个不同的主机上.然而,随着每秒事务数与可用性需求的提高,以及数据库往云或虚拟环境的迁移,向外扩展到廉价硬件的经济优势越来越难以抵挡.</p>
<p>  RDBMS或许比较难以在廉价的集群上进行向外扩展,但是,NoSQL数据库的新品从设计之初就是为了利用新节点的优势进行透明扩展,他们通常在设计时就考虑使用低成本的廉价硬件.</p>
<p style="font-weight:bold;">2. 大数据量</p>
<p>  在过去10年,与每秒事务数的增长超出了认知一样,存储的数据的规模也出现了极大的增长.O’Reilly明智的称此为”数据的工业革命.”RDBMS的容量也在增长以匹配这些数据的增长,但是,与每秒事务数一样,单个RDBMS可有效管理的数据规模限制让部分企业越来越难以忍受.今天,大规模数据量可以交由NoSQL系统来处理,比如Hadoop,超过目前最大的RDBMS可以管理的数据规模.</p>
<p style="font-weight:bold;">3. 再见了,DBA(回头见,DBA?)</p>
<p>  这些年,虽然RDBMS的提供商宣称推出了很多的可管理性方面的改进,高端的RDBMS系统还是只能交由昂贵的、高度受训的DBA来进行维护.高端RDBMS系统从设计到安装以及后续的调优，都需要DBA们深度介入.</p>
<p>  从理论上，通常，NoSQL数据库的最初的设计目标就是更少的管理介入:自动修复、数据分布以及更简单的数据模型，从而更少的管理与调优需求.实际上，关于DBA将死的谣言很可能被略微放大了.对于任何关键的数据存储,总是需要有人来关心它的性能以及可用性.</p>
<p style="font-weight:bold;">4. 经济性</p>
<p>  NoSQL数据库通常使用廉价服务器集群来管理暴增的数据与事务规模,而RDBMS倾向于依赖昂贵的专有服务器与存储系统.其结果是,NoSQL数据库的每GB数据或每秒事务数的成本要远远低于RDBMS,使得你可以以更低的价格来存储与处理更多的数据.</p>
<p style="font-weight:bold;">5. 灵活的数据模型</p>
<p>  在大量的生产环境数据库中,变更管理是一个非常棘手的问题.哪怕是对数据模型的很小的变更,在RDBMS中也需要进行小心的管理,甚至还需要停机或降低服务级别.</p>
<p>  在数据模型的限制这一点上，NoSQL数据库要宽松的多，或者完全不存在. NoSQL的键值存储(Key value Store)与文档数据库(Document Database)允许应用在一个数据单元中存入它想要的任何结构.即使是定义更加严格的基于BigTable的NoSQL数据库,通常也允许创建新的字段而不致带来麻烦.</p>
<p>  其结果是,应用的变更与数据库结构的变更不需要绑定在一个变更单元中进行管理.理论上,这可以提高应用的迭代速度,然而,显然,如果应用无法管理数据的完整性,它将带来不良的副作用.</p>
<p style="font-weight:bold;">NoSQL的5个挑战</p>
<p>  NoSQL数据库的可能性空间引发了大量的关注,但是,在它们成为企业级应用的主流之前,还有大量的障碍有待克服.下面是几个主要的挑战.</p>
<p style="font-weight:bold;">1. 成熟度</p>
<p>  RDBMS已经存在了很长一段时间. NoSQL的支持者认为它们的年纪是它们过时的象征,但是,对于大部分CIO(首席信息官)来讲,RDBMS的成熟度是可以让人放心的.通常,RDBMS系统都很稳定,功能也很丰富.相比而言,大部分NoSQL的替代品都还处于前-生产环境阶段,还有大量的关键特性有待实现.</p>
<p>  生活在科技前沿对于大部分开发人员来讲,是令人兴奋的,但是,企业在实施时必须非常谨慎.</p>
<p style="font-weight:bold;">2. [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://blogs.techrepublic.com.com/10things/?p=1772">你需要知道的关于NoSQL数据库的10件事</a></strong></p>
<p>By Guy Harrison , Translated By <a href="http://www.dbthink.com/">Jametong</a></p>
<p>关系数据模型已经流行了几十年了,但是一种新型的数据库(即NoSQL)正在吸引各大企业的关注.下面是对其优势与劣势的一个简单总结.</p>
<p> 在过去的1/4世纪中,关系型数据库(RDBMS)一直是数据库管理系统的主导模型.但是,今天,非关系型,”云,”或者”NoSQL”数据库正以数据库管理系统的替代模型而获得认知.在本文中,我们将考察这些非关系型NoSQL数据库的10个关键因素:最重要的5个优势以及5个挑战.</p>
<p>  可以通过此链接下载本文的<a target="_blank" href="http://downloads.techrepublic.com.com/abstract.aspx?docid=2006531&amp;tag=leftCol;post-1772">PDF格式</a>.</p>
<p style="font-weight:bold;">NoSQL的5个优势</p>
<p style="font-weight:bold;">1. 弹性扩展</p>
<p>  多年来,数据库管理员一直依赖于向上扩展(scale up)－随着数据库负载的增加购买更大的数据库服务器―而不是向外扩展－随着负载的增加将数据库分不到多个不同的主机上.然而,随着每秒事务数与可用性需求的提高,以及数据库往云或虚拟环境的迁移,向外扩展到廉价硬件的经济优势越来越难以抵挡.</p>
<p>  RDBMS或许比较难以在廉价的集群上进行向外扩展,但是,NoSQL数据库的新品从设计之初就是为了利用新节点的优势进行透明扩展,他们通常在设计时就考虑使用低成本的廉价硬件.</p>
<p style="font-weight:bold;">2. 大数据量</p>
<p>  在过去10年,与每秒事务数的增长超出了认知一样,存储的数据的规模也出现了极大的增长.O’Reilly明智的称此为”数据的工业革命.”RDBMS的容量也在增长以匹配这些数据的增长,但是,与每秒事务数一样,单个RDBMS可有效管理的数据规模限制让部分企业越来越难以忍受.今天,大规模数据量可以交由NoSQL系统来处理,比如Hadoop,超过目前最大的RDBMS可以管理的数据规模.</p>
<p style="font-weight:bold;">3. 再见了,DBA(回头见,DBA?)</p>
<p>  这些年,虽然RDBMS的提供商宣称推出了很多的可管理性方面的改进,高端的RDBMS系统还是只能交由昂贵的、高度受训的DBA来进行维护.高端RDBMS系统从设计到安装以及后续的调优，都需要DBA们深度介入.</p>
<p>  从理论上，通常，NoSQL数据库的最初的设计目标就是更少的管理介入:自动修复、数据分布以及更简单的数据模型，从而更少的管理与调优需求.实际上，关于DBA将死的谣言很可能被略微放大了.对于任何关键的数据存储,总是需要有人来关心它的性能以及可用性.</p>
<p style="font-weight:bold;">4. 经济性</p>
<p>  NoSQL数据库通常使用廉价服务器集群来管理暴增的数据与事务规模,而RDBMS倾向于依赖昂贵的专有服务器与存储系统.其结果是,NoSQL数据库的每GB数据或每秒事务数的成本要远远低于RDBMS,使得你可以以更低的价格来存储与处理更多的数据.</p>
<p style="font-weight:bold;">5. 灵活的数据模型</p>
<p>  在大量的生产环境数据库中,变更管理是一个非常棘手的问题.哪怕是对数据模型的很小的变更,在RDBMS中也需要进行小心的管理,甚至还需要停机或降低服务级别.</p>
<p>  在数据模型的限制这一点上，NoSQL数据库要宽松的多，或者完全不存在. NoSQL的键值存储(Key value Store)与文档数据库(Document Database)允许应用在一个数据单元中存入它想要的任何结构.即使是定义更加严格的基于BigTable的NoSQL数据库,通常也允许创建新的字段而不致带来麻烦.</p>
<p>  其结果是,应用的变更与数据库结构的变更不需要绑定在一个变更单元中进行管理.理论上,这可以提高应用的迭代速度,然而,显然,如果应用无法管理数据的完整性,它将带来不良的副作用.</p>
<p style="font-weight:bold;">NoSQL的5个挑战</p>
<p>  NoSQL数据库的可能性空间引发了大量的关注,但是,在它们成为企业级应用的主流之前,还有大量的障碍有待克服.下面是几个主要的挑战.</p>
<p style="font-weight:bold;">1. 成熟度</p>
<p>  RDBMS已经存在了很长一段时间. NoSQL的支持者认为它们的年纪是它们过时的象征,但是,对于大部分CIO(首席信息官)来讲,RDBMS的成熟度是可以让人放心的.通常,RDBMS系统都很稳定,功能也很丰富.相比而言,大部分NoSQL的替代品都还处于前-生产环境阶段,还有大量的关键特性有待实现.</p>
<p>  生活在科技前沿对于大部分开发人员来讲,是令人兴奋的,但是,企业在实施时必须非常谨慎.</p>
<p style="font-weight:bold;">2. 支持力度</p>
<p>  企业还希望获得保证,当关键系统出现故障时,他们可以获得及时而有效的支持.所有的RDBMS提供商都在竭尽全力地为企业提供高级别的支持.</p>
<p>  相比而言,大部分的NoSQL系统都是开源项目,虽然,每一个NoSQL数据库通常都会有一家或多家公司为其提供支持,这些公司通常都是小的创业公司,没有能力提供全球的支持,没有足够的支持资源,或者没有类似于Oracle、Microsoft或者IBM的信用.</p>
<p style="font-weight:bold;">3. 分析与商业智能</p>
<p>  NoSQL数据库经过不断的演化,已经可以满足现代的Web 2.0应用的扩展需求.相应地,它们的大部分功能集也旨在满足这些应用的需求.然而,应用程序中的数据的价值,要超出一个典型的Web应用的插入-阅读-更新-删除的周期.从公司数据库中挖掘信息以提高公司的效率与竞争力的业务,以及商业智能(BI)是所有大中型公司的关键议题.</p>
<p>  NoSQL数据库提供了新型的工具来做即时的查询与分析.哪怕是一个简单的查询,也需要可观的编程技能,通常使用的BI工具都无法访问NoSQL数据库.</p>
<p>  稍显宽慰的是,还有类似于HIVE与PIG的这类解决方案,通过它们可以较为简单地访问Hadoop集群中的数据,或许最终,可以较为简单的访问其他的NoSQL数据库.Quest软件公司开发一个产品,Toad For Cloud Database,它提供了对各种不同的NoSQL数据库的即时查询功能.</p>
<p style="font-weight:bold;">4. 管理</p>
<p>  NoSQL的设计目标可能是提供零-管理的解决方案,但是,当前的现实是,此目标远远没有实现.目前的NoSQL系统需要大量的技能来进行安装,以及需要大量的努力来进行维护.</p>
<p style="font-weight:bold;">5. 专业技能</p>
<p>  坦率的讲,目前世界上有上百万的程序员非常熟悉RDBMS的原理与编程,他们分布在各种业务场景中.相比而言,几乎每一个NoSQL开发人员都还处于学习阶段.随着时间的流逝,这种状况将得到解决,但是,现在,寻找一个有经验的RDBMS开发人员与RDBMS管理员要比寻找一个NoSQL专家要容易的多.</p>
<p style="font-weight:bold;">结论</p>
<p>  NoSQL数据库正在成为越来越多的数据库环境的重要的组成部分,如果使用得当的话,它可以提供实实在在的收益.然而,企业在推进它们的使用时需要非常谨慎,需要明白这些数据库的相关内在限制与问题.</p>
<p style="font-weight:bold;">关于作者</p>
<p>  Guy Harrison是Quest 软件公司的研发部门的总监. 知名的数据库专家,有着20多年的应用与数据库管理、性能调优与软件开发相关经验,Guy是出版了多本关于数据库技术的书籍,发表了大量相关的文章,并经常在技术会议上做演讲.</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/dbthink/~4/rioKacbELYw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbthink.com/?feed=rss2&amp;p=630</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.dbthink.com/?p=630</feedburner:origLink></item>
		<item>
		<title>纪念曹行,纪念曹老大</title>
		<link>http://feedproxy.google.com/~r/dbthink/~3/QjkCv5tyQWM/</link>
		<comments>http://www.dbthink.com/?p=621#comments</comments>
		<pubDate>Thu, 19 Aug 2010 10:51:49 +0000</pubDate>
		<dc:creator>jametong</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.dbthink.com/?p=621</guid>
		<description><![CDATA[<p>跟曹老大的接触不是特别多,但不得不说,他是我非常欣赏的人,每次都给我非常亲切的感觉,每次都能看到他真诚的淡淡的微笑..谨以此贴纪念之.</p>
<p>曹行携家人在海南度假期间发生溺水意外，永远离开了我们！！！</p>
<p>惊闻噩耗，难以置信，欲哭无泪！他的身影，亲切的笑容，充满智慧的话语，乐于助人的行为，令我们无法相信这残酷的事实！</p>
<p>此时此刻，我不知用什么样的文字才能纪念，才能缅怀我记忆中永远那么可爱的曹行！</p>
<p>LIFE GOES ON！生活在继续！让我们为失去的战友，导师，伙伴哀悼，让我们为曹行在天之灵祈福，保佑曹行的家人，让我们去实现曹行未尽的理想！珍惜生命，认真生活！</p>
<p>我们亲爱的战友，曹行， 你一路走好啊！</p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<blockquote><p>跟曹老大的接触不是特别多,但不得不说,他是我非常欣赏的人,每次都给我非常亲切的感觉,每次都能看到他真诚的淡淡的微笑..谨以此贴纪念之.</p></blockquote>
<p>曹行携家人在海南度假期间发生溺水意外，永远离开了我们！！！</p>
<p>惊闻噩耗，难以置信，欲哭无泪！他的身影，亲切的笑容，充满智慧的话语，乐于助人的行为，令我们无法相信这残酷的事实！</p>
<p>此时此刻，我不知用什么样的文字才能纪念，才能缅怀我记忆中永远那么可爱的曹行！</p>
<p>LIFE GOES ON！生活在继续！让我们为失去的战友，导师，伙伴哀悼，让我们为曹行在天之灵祈福，保佑曹行的家人，让我们去实现曹行未尽的理想！珍惜生命，认真生活！</p>
<p>我们亲爱的战友，曹行， 你一路走好啊！</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/dbthink/~4/QjkCv5tyQWM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbthink.com/?feed=rss2&amp;p=621</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.dbthink.com/?p=621</feedburner:origLink></item>
		<item>
		<title>Cassandra Summit 2010上两个不错的ppt</title>
		<link>http://feedproxy.google.com/~r/dbthink/~3/F7ERxmx-J4s/</link>
		<comments>http://www.dbthink.com/?p=612#comments</comments>
		<pubDate>Wed, 11 Aug 2010 08:42:03 +0000</pubDate>
		<dc:creator>jametong</dc:creator>
				<category><![CDATA[My Reading]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://www.dbthink.com/?p=612</guid>
		<description><![CDATA[<p>1. Jonathan Ellis 做的关于Cassandra 0.6以及0.7版本的新功能</p>

a. 新增了对Compaction的优先级控制.
-XX:+UseThreadPriorities \
-XX:ThreadPriorityPolicy=42 \
-Dcassandra.compaction.priority=1 \

b. 对Hinted Handoff的手工控制.
0.6.0: send hints to natural replicas
0.6.0: fix row-level concurrency bottleneck
0.6.2: option to disable entirely
0.6.3: remove hourly scan
0.6.4: lower priority
0.6.5: paging of large hinted rows
0.7.0: large rows

c. 在0.6.4上调整了SEDA的流控制(Flow Control),将Message Deserializer的步骤去掉了(这在我们这边的测试中,成为了系统的写性能瓶颈)
d. 在0.7版本中,大大提供了Cassandra的Read Performance(这一点,我非常期待)

State of Cassandra, August 2010
View more presentations from jbellis.

<p>2. Benjamin Black做的关于Cassandra的运维与故障诊断介绍.
故障诊断部分的介绍,我认为写的非常好, 对于做其他类似的问题的诊断也有部分效果.</p>

a. 如何调整Cassandra的Ring分布, 这个问题也是困扰我已久的问题, 内部也有兄弟问过我这个问题, [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p><strong>1. Jonathan Ellis 做的关于Cassandra 0.6以及0.7版本的新功能</strong></p>
<ul>
<li>a. 新增了对Compaction的优先级控制.<br />
-XX:+UseThreadPriorities \<br />
-XX:ThreadPriorityPolicy=42 \<br />
-Dcassandra.compaction.priority=1 \
</li>
<li>b. 对Hinted Handoff的手工控制.<br />
0.6.0: send hints to natural replicas<br />
0.6.0: fix row-level concurrency bottleneck<br />
0.6.2: option to disable entirely<br />
0.6.3: remove hourly scan<br />
0.6.4: lower priority<br />
0.6.5: paging of large hinted rows<br />
0.7.0: large rows
</li>
<li>c.<strong> 在0.6.4上调整了SEDA的流控制(Flow Control),将Message Deserializer的步骤去掉了</strong>(<em>这在我们这边的测试中,成为了系统的写性能瓶颈</em>)</li>
<li>d. <strong>在0.7版本中,大大提供了Cassandra的Read Performance(这一点,我非常期待)</strong></li>
</ul>
<div style="width:425px" id="__ss_4938730"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/jbellis/state-of-cassandra-august-2010" title="State of Cassandra, August 2010">State of Cassandra, August 2010</a></strong><object id="__sse4938730" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cassandrasummit2010-100810134140-phpapp02&#038;stripped_title=state-of-cassandra-august-2010" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4938730" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cassandrasummit2010-100810134140-phpapp02&#038;stripped_title=state-of-cassandra-august-2010" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/jbellis">jbellis</a>.</div>
</div>
<p><strong>2. Benjamin Black做的关于Cassandra的运维与故障诊断介绍.</strong><br />
故障诊断部分的介绍,我认为写的非常好, 对于做其他类似的问题的诊断也有部分效果.</p>
<ul>
<li>a. 如何调整Cassandra的Ring分布, 这个问题也是困扰我已久的问题, 内部也有兄弟问过我这个问题, 从我的理解上, Cassandra的Ring分布也是类似于Oracle的Hash Partition策略, 默认是按照bit位来分布, 但是可以手工对其进行调整, 这个ppt里面就介绍了具体的调整方法.</li>
<li>b. 如何诊断Cassandra的读性能较差的问题, 通过noodtool tpstat与iostat命令确定是否由于磁盘的问题,以及给出一些简单的调整原则.<br />
<strong>less frequent memtable flush<br />
less frequent compaction<br />
less disk bandwidth demand</strong>
</li>
<li>c. 如何调整DiskAccessMethod或者说,如何合理调整mmap与JVM的使用策略</li>
</ul>
<div style="width:425px" id="__ss_4939779"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/benjaminblack/cassandra-summit-2010-operations-troubleshooting-intro" title="Cassandra Summit 2010 - Operations &amp; Troubleshooting Intro">Cassandra Summit 2010 &#8211; Operations &amp; Troubleshooting Intro</a></strong><object id="__sse4939779" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cassandrasummit2010-operations-100810171349-phpapp01&#038;stripped_title=cassandra-summit-2010-operations-troubleshooting-intro" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4939779" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cassandrasummit2010-operations-100810171349-phpapp01&#038;stripped_title=cassandra-summit-2010-operations-troubleshooting-intro" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/benjaminblack">benjaminblack</a>.</div>
</div>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/dbthink/~4/F7ERxmx-J4s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbthink.com/?feed=rss2&amp;p=612</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.dbthink.com/?p=612</feedburner:origLink></item>
		<item>
		<title>为什么Flowdock从Cassandra迁移到MongoDB</title>
		<link>http://feedproxy.google.com/~r/dbthink/~3/pUePSH-pv8Y/</link>
		<comments>http://www.dbthink.com/?p=599#comments</comments>
		<pubDate>Mon, 09 Aug 2010 10:02:03 +0000</pubDate>
		<dc:creator>jametong</dc:creator>
				<category><![CDATA[Translation]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[cassandra]]></category>
		<category><![CDATA[flowdock]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[stability]]></category>

		<guid isPermaLink="false">http://www.dbthink.com/?p=599</guid>
		<description><![CDATA[<p>为什么Flowdock从Cassandra迁移到MongoDB
by Otto Hilska @mutru Translated by Jametong</p>
<p>Flowdock是一个基于Web的团队通讯工具.所有的软件开发人员都应该使用它进行沟通,而不是使用Campfires、Skype Chats或IRC等工具.因为它可以更好的的支持他们的真实工作流.</p>
<p>上周,我们对Flowdock的数据库服务做了一次切换,聪从Cassandra迁移到了另一种NoSQL工具-MongoDB.由于我们的技术选择已经引起了大家的部分兴趣,我将在此向公众说明下我们的决策理由.</p>
<p>我们的部分客户一定对下面这个图片记忆犹新:</p>
<p></p>
<p>从一定程度上讲,我们遭遇到了Cassandra的稳定性问题.所有的节点都陷入无线无限循环(infinite loop),运行垃圾回收工作(GC, Garbage Collection)并尝试压缩数据文件-并偶尔导致集群瘫痪.除了对集群进行重启并经常性的手工对节点做压缩工作以让其稳定一会外,我们无计可施.其他人也报告过类似的问题.在前面几周的时间里,我们的Cassandra节点总是会吃掉给他分配的所有资源,而导致Flowdock运行缓慢.</p>
<p>由于我们刀口嗜血式的数据库选择(James注: 这是我不认同的地方,可能对于一些Startup的公司来讲,这是一种不得已的选择.),这已经不是我们第一次遇到此类问题了.从Cassandra 0.4升级到0.5的时候,我们被迫关闭了整个集群,仅仅是为了将所有的数据刷新到磁盘上(虽然,我们已经按照文档进行了手工刷新的操作).这个操作导致我们丢失了几分钟的讨论内容,以及我们手工创建的索引出现严重的不一致,以致于需要做完全的重建.我想,我们最后离开办公室的时间已经是凌晨4点了.</p>
<p>从我们最初选择Cassandra到现在,NoSQL社区已经出现了很大的变化.MongoDB已经发生了很大的改变,最近新增的自动分片(auto-sharding)与副本集(replica set)使得它可以作为Cassandra的有力的替代品.因此,我们决定试试MongoDB.</p>
<p>写从Cassandra往MongoDB的数据迁移的脚本耗费我一天的时间.在一周左右的时间内,我们已经可以完全在MongoDB上运行Flowdock了.在生产环境部署MongoDB之前,内部测试持续进行了好几个星期.</p>
<p>目前,我们已经完成这个调整,</p>

1.	智能(多键)索引. 手工维护的索引令人生厌,MongoDB可以自动帮我们维护所需的索引.例如,我们的消息包含标签(tag),例如下面这个格式的document:

{ content: "Write a blog post about #mongodb.",
  workspace: 'myflow',
  tags: ["mongodb", "todo", "@Otto"] }
这样,如果仅检索自己的任务,Flowdock的后台只需要做下面这个查询:
db.messages.find({
  workspace: 'myflow',
  tags: { $all: ["todo", "@Otto"] }
})


2.	查询.无论数据模型多么简单,每当需要执行一个查询的时候,你都不需要提前规划此事.在MongoDB中,你可以直接在控制台定制复杂的查询,这一点非常类似于SQL数据库.它会据此执行一次顺序扫描,这比在客户端手工处理上百万的记录要更快捷也更便利.
3.	Map-Reduce. 这是分析人员的利器啊.MongoDB的Map-Reduce功能支持虽然不是非常完美,但它起码很易用.
4.	GridFS让我们的文件存储操作变得非常容易.它的存储能力可以随着我们的MongoDB集群的扩展一起增长.

<p>我们也遭遇到部分轻微的限制:</p>

1.	我们发现了一个JSON解析的bug,不过我们在10分钟内就解决了此bug.
2.	BSON的Document键中不支持点(dot).通常,这或许不是个问题,但是我们必须在数据迁移中解决此问题.
3.	Document有4MB的大小限制.这对于我们的数据模型来讲不是问题,由于MongoDB对在位的原子更新(atomic in-place updates)有非常好的支持,所以,你需要关注,Document不要超过4MB的限制.
4.	增加新的节点没有在Cassandra中那么容易.然而,Cassandra在新增节点的负载均衡上有它自己的问题.

<p>到目前为止,它的运行还非常平稳.开发人员与数据库管理员的工作也因此减轻了很多.</p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.nodeta.fi/2010/07/26/flowdock-migrated-from-cassandra-to-mongodb/">为什么Flowdock从Cassandra迁移到MongoDB</a><br />
by Otto Hilska @<a href="http://www.twitter.com/mutru">mutru</a> Translated by <a href="http://www.dbthink.com/">Jametong</a></p>
<p><a href="http://www.flowdock.com/">Flowdock</a>是一个基于Web的团队通讯工具.所有的软件开发人员都应该使用它进行沟通,而不是使用Campfires、Skype Chats或IRC等工具.因为它可以更好的的支持他们的真实工作流.</p>
<p>上周,我们对Flowdock的数据库服务做了一次切换,<del datetime="2010-08-11T05:04:11+00:00">聪</del>从<a href="http://cassandra.apache.org/">Cassandra</a>迁移到了另一种NoSQL工具-<a href="http://www.mongodb.org/">MongoDB</a>.由于我们的技术选择已经引起了大家的部分兴趣,我将在此向公众说明下我们的决策理由.</p>
<p>我们的部分客户一定对下面这个图片记忆犹新:</p>
<p><img src="http://www.dbthink.com/wp-content/uploads/2010/08/screenshot-twitter-problems.png"/></p>
<p>从一定程度上讲,我们遭遇到了Cassandra的稳定性问题.所有的节点都陷入<del datetime="2010-08-10T06:02:35+00:00">无线</del><strong>无限</strong>循环(infinite loop),运行垃圾回收工作(GC, Garbage Collection)并尝试压缩数据文件-并偶尔导致集群瘫痪.除了对集群进行重启并经常性的手工对节点做压缩工作以让其稳定一会外,我们无计可施.<a href="https://issues.apache.org/jira/browse/CASSANDRA-1014">其他人也报告过类似的问题</a>.在前面几周的时间里,我们的Cassandra节点总是会吃掉给他分配的所有资源,而导致Flowdock运行缓慢.</p>
<p>由于我们<strong>刀口嗜血式</strong>的数据库选择(<em>James注: 这是我不认同的地方,可能对于一些Startup的公司来讲,这是一种不得已的选择.</em>),这已经不是我们第一次遇到此类问题了.从Cassandra 0.4升级到0.5的时候,我们被迫关闭了整个集群,仅仅是为了将所有的数据刷新到磁盘上(虽然,我们已经<a href="https://svn.apache.org/repos/asf/cassandra/tags/cassandra-0.5.0/NEWS.txt">按照文档</a>进行了手工刷新的操作).这个操作导致我们丢失了几分钟的讨论内容,以及我们手工创建的索引出现严重的不一致,以致于需要做完全的重建.我想,我们最后离开办公室的时间已经是凌晨4点了.</p>
<p>从我们最初选择Cassandra到现在,NoSQL社区已经出现了很大的变化.MongoDB已经发生了很大的改变,最近新增的自动分片(auto-sharding)与副本集(replica set)使得它可以作为Cassandra的有力的替代品.因此,我们决定试试MongoDB.</p>
<p>写从Cassandra往MongoDB的数据迁移的脚本耗费我一天的时间.在一周左右的时间内,我们已经可以完全在MongoDB上运行Flowdock了.在生产环境部署MongoDB之前,内部测试持续进行了好几个星期.</p>
<p>目前,我们已经完成这个调整,</p>
<ul>
<li>1.	<strong>智能(多键)索引</strong>. 手工维护的索引令人生厌,MongoDB可以自动帮我们维护所需的索引.例如,我们的消息包含标签(tag),例如下面这个格式的document:
<pre class="brush:text">
{ content: "Write a blog post about #mongodb.",
  workspace: 'myflow',
  tags: ["mongodb", "todo", "@Otto"] }
这样,如果仅检索自己的任务,Flowdock的后台只需要做下面这个查询:
db.messages.find({
  workspace: 'myflow',
  tags: { $all: ["todo", "@Otto"] }
})
</pre>
</li>
<li>2.	<strong>查询</strong>.无论数据模型多么简单,每当需要执行一个查询的时候,你都不需要提前规划此事.在MongoDB中,你可以直接在控制台定制复杂的查询,这一点非常类似于SQL数据库.它会据此执行一次顺序扫描,这比在客户端手工处理上百万的记录要更快捷也更便利.</li>
<li>3.	<strong>Map-Reduce</strong>. 这是分析人员的利器啊.MongoDB的Map-Reduce功能支持虽然不是非常完美,但它起码很易用.</li>
<li>4.	<strong>GridFS</strong>让我们的文件存储操作变得非常容易.它的存储能力可以随着我们的MongoDB集群的扩展一起增长.</li>
</ul>
<p>我们也遭遇到部分轻微的限制:</p>
<ul>
<li>1.	我们发现了<a href="http://jira.mongodb.org/browse/JAVA-131">一个JSON解析的bug</a>,不过我们在10分钟内就解决了此bug.</li>
<li>2.	BSON的Document键中不支持点(dot).通常,这或许不是个问题,但是我们必须在数据迁移中解决此问题.</li>
<li>3.	Document有4MB的大小限制.这对于我们的数据模型来讲不是问题,由于MongoDB对<a href="http://www.mongodb.org/display/DOCS/Updating">在位的原子更新(atomic in-place updates)</a>有非常好的支持,所以,你需要关注,Document不要超过4MB的限制.</li>
<li>4.	增加新的节点没有在Cassandra中那么容易.然而,Cassandra在新增节点的负载均衡上有它自己的问题.</li>
</ul>
<p>到目前为止,它的运行还非常平稳.开发人员与数据库管理员的工作也因此减轻了很多.</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/dbthink/~4/pUePSH-pv8Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbthink.com/?feed=rss2&amp;p=599</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.dbthink.com/?p=599</feedburner:origLink></item>
		<item>
		<title>Amazon关于切换到云计算的5条建议</title>
		<link>http://feedproxy.google.com/~r/dbthink/~3/WcwF01Z1f7E/</link>
		<comments>http://www.dbthink.com/?p=596#comments</comments>
		<pubDate>Mon, 02 Aug 2010 03:48:15 +0000</pubDate>
		<dc:creator>jametong</dc:creator>
				<category><![CDATA[My Reading]]></category>

		<guid isPermaLink="false">http://www.dbthink.com/?p=596</guid>
		<description><![CDATA[<p> Amazon gives us 5 things to consider when making the cloud switch</p>
<p>摘自 http://mor.ph/blogs/5-lessons-when-switching-switching-to-cloud-Amazon-IT</p>

1. Moving to cloud computing is a business decision, not political or marketing mandate.  Target the project as a multi-year effort.
2. Server consolidation and virtualization are important initial steps.
3. Start with simple applications;  with financials as the last to move.
4. [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p><strong> Amazon gives us 5 things to consider when making the cloud switch</strong></p>
<p>摘自 <a href="http://mor.ph/blogs/5-lessons-when-switching-switching-to-cloud-Amazon-IT">http://mor.ph/blogs/5-lessons-when-switching-switching-to-cloud-Amazon-IT</a></p>
<ul>
<li>1. Moving to cloud computing is a business decision, not political or marketing mandate.  Target the project as a multi-year effort.</li>
<li>2. Server consolidation and virtualization are important initial steps.</li>
<li>3. Start with simple applications;  with financials as the last to move.</li>
<li>4. Do homework.  Execute risk assessment and take steps to evaluate cloud vendor.</li>
<li>5. Think hard and implement security at the application level, not just at operations.</li>
</ul>
<ul>
<li>1. 迁移到云集算平台上是一个<strong>商业决策</strong>,<strong>不能只是政治或市场指令</strong>. 此项目可能需要多年的努力.</li>
<li>2. 服务器的整合与虚拟化对于迁移成功很重要.</li>
<li>3. 先迁移简单的应用,将财务类的应用放到最后再做.</li>
<li>4. 做大量的准备. 做好风险评估并花费资源评估各云提供商的产品.</li>
<li>5. 在应用层对安全做深入的考虑以及实现,而不只是考虑运维层面的安全性.</li>
</ul>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/dbthink/~4/WcwF01Z1f7E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbthink.com/?feed=rss2&amp;p=596</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.dbthink.com/?p=596</feedburner:origLink></item>
		<item>
		<title>Feed提供商更换</title>
		<link>http://feedproxy.google.com/~r/dbthink/~3/a-vTyUPmdT8/</link>
		<comments>http://www.dbthink.com/?p=594#comments</comments>
		<pubDate>Sun, 01 Aug 2010 07:37:30 +0000</pubDate>
		<dc:creator>jametong</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dbthink.com/?p=594</guid>
		<description><![CDATA[<p>由于Feedsky无法刷新我的blog的Feed(估计可能是国内的域名登记问题),已经在Feedsky登记删除此feed,并将新的链接指向feedburner的feed..Feedsky的链接会保留一个月的时间,一个月以后Feedsky的链接将不再可用.</p>
<p>新相关同学点击此链接重新订阅. </p>
<p>订阅本Blog</p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<p>由于Feedsky无法刷新我的blog的Feed(估计可能是国内的域名登记问题),已经在Feedsky登记删除此feed,并将新的链接指向feedburner的feed..Feedsky的链接会保留一个月的时间,一个月以后Feedsky的链接将不再可用.</p>
<p>新相关同学点击此链接重新订阅. </p>
<p><a href="http://feeds.feedburner.com/dbthink">订阅本Blog</a></p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/dbthink/~4/a-vTyUPmdT8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbthink.com/?feed=rss2&amp;p=594</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dbthink.com/?p=594</feedburner:origLink></item>
		<item>
		<title>Index Rebuild Online 过程(9i)完整版</title>
		<link>http://feedproxy.google.com/~r/dbthink/~3/LlneCTuioIg/</link>
		<comments>http://www.dbthink.com/?p=590#comments</comments>
		<pubDate>Wed, 28 Jul 2010 02:04:39 +0000</pubDate>
		<dc:creator>jametong</dc:creator>
				<category><![CDATA[Index]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[enqueue lock]]></category>
		<category><![CDATA[index rebuild online]]></category>

		<guid isPermaLink="false">http://www.dbthink.com/?p=590</guid>
		<description><![CDATA[<p>昨天晚上洗澡时新想到一个可以有效测试index rebuild online的方式, 也就是同时使用10046与10704 的trace event再配合lock阻塞的机制来测试index rebuild online的过程. </p>
<p>测试的过程如下.</p>

--1. 构造一个500w条记录的表. 并创建需要rebuild online的索引.
--表的数量设置到这么大,,主要是为了给后续的操作留出手工运行的时间.
create table james_t as
select rownum id,dbms_random.string('l',20) user_name
from dual
connect by level 


Related posts:<ol><li><a href='http://www.dbthink.com/?p=452' rel='bookmark' title='Permanent Link: index rebuild online处理过程'>index rebuild online处理过程</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>昨天晚上洗澡时新想到一个可以有效测试index rebuild online的方式, 也就是同时使用10046与10704 的trace event再配合lock阻塞的机制来测试index rebuild online的过程. </p>
<p>测试的过程如下.</p>
<pre class="brush:sql">
--1. 构造一个500w条记录的表. 并创建需要rebuild online的索引.
--表的数量设置到这么大,,主要是为了给后续的操作留出手工运行的时间.
create table james_t as
select rownum id,dbms_random.string('l',20) user_name
from dual
connect by level <= 5e6;

create index james_t_pk on james_t (id);

--2. 在Session 2 (故意设置阻塞的进程)运行一个针对表james_t 的单条记录的更新.
update james_t set user_name = 'test 1' where rownum <= 1;

--3. 在Session 3中观察,当观察到session 1被堵塞在Table Share Lock的Request模式时进行下一步.
select /*+ rule*/a.* from v$lock a,v$session b where a.sid = b.sid and b.username = 'JAMES';

--4. 在Session 1 (运行index rebuild online的进程)运行如下语句.
alter session set events '10704 trace name context forever,level 10';
alter session set events '10046 trace name context forever,level 12';
alter index james_t_pk rebuild online;

--5. 在Session 2 提交前一个事务,使得rebuild online 过程继续,并运行一个需要大量index字段的更新操作.
--构造需要rebuild online在获取下一次Table Share lock之前需要Merge的数据.
commit;
update james_t set id = 5000000 + id where rownum <= 3e5;
commit;

--6. 在Session 2上运行一个类似于第二步的简单更新,意在阻塞Rebuild Online获取Table Share Lock.
update james_t set user_name = 'test 1' where rownum <= 1;

--7.  在Session 3中观察,当观察到session 1被堵塞在Table Share Lock的Request模式时,执行下面的语句后进行下一步.
--清空Buffer Cache以观察Session 1在获取Table Share Lock后执行的操作.(可供下载的Trace文件没有做这一步)
alter session set events = 'immediate trace name flush_cache';

--8. 提交Session 2的事务, 等待Rebuild Online结束..

--9. 从Session 3中提取出Session 1对应的Trace文件,,以及下面的v$session_longops 的结果.
SID	SERIAL#	OPNAME	TARGET	TARGET_DESC	SOFAR	TOTALWORK	UNITS	START_TIME	LAST_UPDATE_TIME
10	19	Sort Output			14759	14759	Blocks	07/28/2010 09:14:26	07/28/2010 09:14:41
</pre>
<p><strong>1. 取得表上的Sub Share锁. 索引的object_id = 6399.</strong><br />
*** 2010-07-27 23:07:16.000<br />
ksqcmi: TM,18fe,0 mode=2 timeout=21474836<br />
ksqcmi: returns 0</p>
<p><strong>2. 创建日志表.</strong><br />
"JAMES"."SYS_JOURNAL_6399"</p>
<p>create table "JAMES"."SYS_JOURNAL_6399" (C0 NUMBER,  opcode char(1), partno number,  rid rowid, primary key( C0 , rid ))<br />
organization index TABLESPACE "USERS"</p>
<p>CREATE UNIQUE INDEX "JAMES"."SYS_IOT_TOP_6406" on "JAMES"."SYS_JOURNAL_6399"("C0","RID") INDEX ONLY TOPLEVEL TABLESPACE "USERS" NOPARALLEL</p>
<p><strong>3. 请求表上的Share锁.</strong><br />
*** 2010-07-27 23:07:16.000<br />
ksqcmi: TM,18fe,0 mode=4 timeout=21474836<br />
WAIT #1: nam='enqueue' ela= 3072242 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072273 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072430 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3071962 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072350 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072367 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072086 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072453 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 387366 p1=1414332420 p2=6398 p3=0<br />
ksqcmi: returns 0</p>
<p>2010-07-27 23:07:16.000 + 24.965529 = 2010-07-27 23:07:40.966<br />
--此时间与下面获取Table Sub Share Lock的时间仅相差20ms左右. 中间的时间主要为统计误差,,因为Trace中的输出是连续的.</p>
<p><strong>4. 取得完毕之后,,立即获取表上的Sub Share锁.</strong><br />
*** 2010-07-27 23:07:41.000<br />
ksqcmi: TM,18fe,0 mode=2 timeout=21474836<br />
ksqcmi: returns 0</p>
<p><strong>5. 读取基础表,,创建索引.</strong><br />
WAIT #1: nam='db file scattered read' ela= 42228 p1=5 p2=4709 p3=4<br />
WAIT #1: nam='db file scattered read' ela= 326 p1=5 p2=4710 p3=3<br />
WAIT #1: nam='db file scattered read' ela= 236 p1=5 p2=4711 p3=2<br />
.................<br />
WAIT #1: nam='db file scattered read' ela= 549 p1=5 p2=36357 p3=4<br />
WAIT #1: nam='db file scattered read' ela= 481 p1=5 p2=36358 p3=3</p>
<p><strong>6. 开始Sort并输出索引. (写入临时文件)</strong><br />
WAIT #1: nam='direct path write' ela= 6 p1=201 p2=19942 p3=31<br />
WAIT #1: nam='direct path write' ela= 2 p1=201 p2=19973 p3=4<br />
WAIT #1: nam='direct path write' ela= 2 p1=201 p2=19721 p3=31<br />
WAIT #1: nam='direct path write' ela= 395 p1=201 p2=19752 p3=12</p>
<p>--继续从表上读取内容.<br />
WAIT #1: nam='db file scattered read' ela= 476 p1=5 p2=36359 p3=2<br />
WAIT #1: nam='db file sequential read' ela= 417 p1=5 p2=36360 p3=1</p>
<p>WAIT #1: nam='direct path write' ela= 6 p1=201 p2=19942 p3=31<br />
WAIT #1: nam='direct path write' ela= 2 p1=201 p2=19973 p3=4<br />
WAIT #1: nam='direct path write' ela= 2 p1=201 p2=19721 p3=31<br />
WAIT #1: nam='direct path write' ela= 395 p1=201 p2=19752 p3=12</p>
<p>--从临时文件读出排好序的结果.<br />
WAIT #1: nam='direct path read' ela= 211 p1=201 p2=19763 p3=1<br />
WAIT #1: nam='direct path read' ela= 57865 p1=201 p2=27472 p3=31<br />
WAIT #1: nam='direct path read' ela= 14829 p1=201 p2=34281 p3=31<br />
..........<br />
WAIT #1: nam='direct path read' ela= 14853 p1=201 p2=20342 p3=19<br />
WAIT #1: nam='direct path read' ela= 16932 p1=201 p2=26315 p3=31<br />
WAIT #1: nam='direct path read' ela= 12710 p1=201 p2=21154 p3=31<br />
WAIT #1: nam='direct path read' ela= 16599 p1=201 p2=32412 p3=31</p>
<p>写索引文件,扩展segment信息.</p>
<p>select file# from file$ where ts#=:1<br />
select type#,blocks,extents,minexts,maxexts,extsize,extpct,user#,iniexts,NVL(lists,65535),NVL(groups,65535),cachehint,hwmincr, NVL(spare1,0) from seg$ where ts#=:1 and file#=:2 and block#=:3<br />
insert into seg$ (file#,block#,type#,ts#,blocks,extents,minexts,maxexts,extsize,extpct,user#,iniexts,lists,groups,cachehint,bitmapranges,scanhint, hwmincr, spare1) values (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,0,0,:16,DECODE(:17,0,NULL,:17))<br />
中间再夹杂部分<br />
WAIT #1: nam='direct path read' ela= 20442 p1=201 p2=31559 p3=1</p>
<p>--结束Sort Output并使用Direct path write写入新索引.<br />
WAIT #1: nam='direct path read' ela= 8504 p1=201 p2=19849 p3=1<br />
WAIT #1: nam='direct path read' ela= 263 p1=201 p2=19974 p3=1<br />
WAIT #1: nam='direct path read' ela= 46962 p1=201 p2=19721 p3=1<br />
WAIT #1: nam='direct path write' ela= 359 p1=5 p2=48351 p3=7<br />
WAIT #1: nam='direct path write' ela= 5 p1=5 p2=48358 p3=7</p>
<p>---在此时间点结束新索引的创建工作.<br />
SID	SERIAL#	OPNAME	TARGET	TARGET_DESC	SOFAR	TOTALWORK	UNITS	START_TIME	LAST_UPDATE_TIME<br />
10	19	Sort Output			14759	14759	Blocks	07/28/2010 09:14:26	07/28/2010 09:14:41</p>
<p><strong>7. 读取Journal表上的变更,,将变更Merge到新的索引上.</strong><br />
--从10046 的traced Event的角度看,,新的索引文件写完成,开始读取Journal表的内容,以merge新索引.</p>
<p>WAIT #1: nam='direct path read' ela= 23577 p1=201 p2=31718 p3=1<br />
WAIT #1: nam='direct path read' ela= 60459 p1=201 p2=31877 p3=1<br />
WAIT #1: nam='direct path write' ela= 5622 p1=5 p2=52496 p3=7<br />
WAIT #1: nam='direct path write' ela= 3 p1=5 p2=52503 p3=2<br />
WAIT #1: nam='db file sequential read' ela= 32390 p1=5 p2=397 p3=1<br />
WAIT #1: nam='db file sequential read' ela= 34345 p1=5 p2=397 p3=1<br />
WAIT #1: nam='db file sequential read' ela= 100004 p1=5 p2=52005 p3=1</p>
<p>--结束新索引的Merge工作.<br />
WAIT #1: nam='db file sequential read' ela= 1521 p1=5 p2=32192 p3=1<br />
WAIT #1: nam='db file sequential read' ela= 205 p1=5 p2=32192 p3=1<br />
WAIT #1: nam='db file sequential read' ela= 252 p1=5 p2=32200 p3=1<br />
WAIT #1: nam='db file sequential read' ela= 375 p1=5 p2=32200 p3=1</p>
<p><strong>8. 请求表上的Share所.</strong><br />
--请求表上的Share 锁,,以准备结束索引重建..<br />
*** 2010-07-28 09:15:17.000<br />
ksqcmi: TM,18fe,0 mode=4 timeout=21474836<br />
WAIT #1: nam='enqueue' ela= 3071546 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072536 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072024 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072293 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072416 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072140 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072175 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072294 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072249 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072318 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072184 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072216 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 3072247 p1=1414332420 p2=6398 p3=0<br />
WAIT #1: nam='enqueue' ela= 1244788 p1=1414332420 p2=6398 p3=0<br />
ksqcmi: returns 0</p>
<p><strong>9. 读取刚刚阻塞Index Rebuild获取Share 锁所产生的Journal日志并将变更merge到索引上. </strong></p>
<p>--说明,,由于Index Rebuild Online进程是做Enqueue Conversion,所以只可能有一个Session会阻塞此进程.<br />
--此次需要Merge的变更量只是阻塞进程产生的变更量,因此一般情况下,,持有Share锁的时间比较短.<br />
--但是会比第一次持有要稍长一点. 需要等后续清理对象的操作结束才能释放.</p>
<p><strong>10. 删除Journal表</strong><br />
drop table "JAMES"."SYS_JOURNAL_6399"</p>
<p><strong>9. 申请Journal表上的Exclusive 锁.</strong><br />
*** 2010-07-27 23:11:03.000<br />
ksqcmi: TM,1906,0 mode=6 timeout=0<br />
ksqcmi: returns 0<br />
=====================</p>
<p><strong>10. 结束索引重建,,修改相关数据字典表</strong><br />
--更新索引上的data_object_id.<br />
update ind$ set ts#=:2,file#=:3,block#=:4,intcols=:5,type#=:6,flags=:7,property=:8,pctfree$=:9,initrans=:10,maxtrans=:11,blevel=:12,leafcnt=:13,distkey=:14,lblkkey=:15,dblkkey=:16,clufac=:17,cols=:18,analyzetime=:19,samplesize=:20,dataobj#=:21,degree=decode(:22,1,null,:22),instances=decode(:23,1,null,:23),rowcnt=:24,pctthres$=:31*256+:25, indmethod#=:26, trunccnt=:27,spare1=:28,spare4=:29,spare2=:30,spare6=:32where obj#=:1<br />
 bind 19: dty=2 mxl=22(22) mal=00 scl=00 pre=00 oacflg=08 oacfl2=1 size=24 offset=0<br />
   bfp=032cc81c bln=24 avl=03 flg=05<br />
   value=6405<br />
 bind 33: dty=2 mxl=22(22) mal=00 scl=00 pre=00 oacflg=08 oacfl2=1 size=24 offset=0<br />
   bfp=032cd8dc bln=22 avl=03 flg=05<br />
   value=6399</p>
<p>更新对象的data_object_id<br />
update obj$ set obj#=:6,type#=:7,ctime=:8,mtime=:9,stime=:10,status=:11,dataobj#=:13,flags=:14,oid$=:15,spare1=:16, spare2=:17 where owner#=:1 and name=:2 and namespace=:3 and(remoteowner=:4 or remoteowner is null and :4 is null)and(linkname=:5 or linkname is null and :5 is null)and(subname=:12 or subname is null and :12 is null)</p>
<p>设置对象新关联的seg实体.通过ts#,header_file#,header_block#<br />
update seg$ set type#=:4,blocks=:5,extents=:6,minexts=:7,maxexts=:8,extsize=:9,extpct=:10,user#=:11,iniexts=:12,lists=decode(:13, 65535, NULL, :13),groups=decode(:14, 65535, NULL, :14), cachehint=:15, hwmincr=:16, spare1=DECODE(:17,0,NULL,:17) where ts#=:1 and file#=:2 and block#=:3</p>
<p>执行Ojbect Checkpoint.<br />
WAIT #1: nam='rdbms ipc reply' ela= 54 p1=5 p2=21474836 p3=0<br />
WAIT #1: nam='rdbms ipc reply' ela= 44 p1=5 p2=21474836 p3=0</p>
<p><strong>11. 到此索引Rebuild完成.</strong></p>
<p>完整的Trace文件文件下载.  <a href="http://www.dbthink.com/wp-content/uploads/2010/07/james_ora_4268.trc.gz">james_ora_4268.trc.gz</a></p>


<p>Related posts:<ol><li><a href='http://www.dbthink.com/?p=452' rel='bookmark' title='Permanent Link: index rebuild online处理过程'>index rebuild online处理过程</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/dbthink/~4/LlneCTuioIg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbthink.com/?feed=rss2&amp;p=590</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.dbthink.com/?p=590</feedburner:origLink></item>
		<item>
		<title>碎片(Fragmentation)–介绍</title>
		<link>http://feedproxy.google.com/~r/dbthink/~3/WC8RDGxa864/</link>
		<comments>http://www.dbthink.com/?p=584#comments</comments>
		<pubDate>Tue, 27 Jul 2010 07:17:59 +0000</pubDate>
		<dc:creator>jametong</dc:creator>
				<category><![CDATA[Translation]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[fragmentaion]]></category>
		<category><![CDATA[Jonathan Lewis]]></category>

		<guid isPermaLink="false">http://www.dbthink.com/?p=584</guid>
		<description><![CDATA[<p>这份笔记最初只是个便条,直到我认识到它的意义不仅与此,从而决定将此便条拓展成一份完整的说明,我计划在接下来的2个星期发表完下面四个部分.</p>

1. 介绍 &#8212; 此文
2. 磁盘与表空间碎片
3. 表碎片
4. 索引碎片

<p>介绍
By Jonathan Lewis Translated By Jametong</p>
<p>单词“fragmentation”（碎片）的涵义是某些东西被分成多个片段,不过,有时也隐含表示被拆成了大量的小片段.在Oracle的语境下,需要仔细考虑你所说的“片段”,片段的粒度大小,以及其对性能产生的可能影响.由于可以在(逻辑)磁盘层面、文件层面、表空间(tablespace)层面、段(segment)层面、区间(extent)层面以及块(block)层面来讨论碎片,当你在评论种说出类似于“我的表空间有碎片”或“我的索引有碎片”时,需要仔细想清楚你到底想要说明什么.</p>
<p>让我从一个例子开始:我创建了一个新的表空间,并移入了一张表.当我检查dba_extents视图,将发现此表空间有100个区间.很明显,从这个单词的基本涵义看,它被“分成多片”了,它有100个不同的片段组成.另一方面,因为此表是我在此表空间内创建的第一个对象,我可以发现所有的区间都相邻,你可以说此表“逻辑上分成多片”但是“物理上连续”.</p>
<p>这个碎片的例子会不会影响你的系统的性能呢？由于大部分Oracle IO都是在块级别上完成(我们将数据块读入到数据库高速缓冲区,我们将数据块写入到数据文件),任何特定区间内的数据块的位置都是无关的,答案或许是no.但有些时候,当我们在一个单一读请求(全表扫描 (TableScan)或者索引快速全扫描(Index Fast Full Scan))中尝试读取多个相邻的数据块时;如果我们的“物理上连续”的表却是“逻辑上被拆分”到了很多个区间,这会不会有问题呢?</p>
<p>假如说,每个区间都只能是64K,这会限制我们将发起的“db file multiblock read”请求的大小吗或者这些请求可以跨越区间边界读取吗?如果这个表空间是有两个(或多个)数据文件组成,而这些区间又是以“轮流”在两个文件之间分配的,这会影响读操作的方式吗?如果我们尝试进行并行表扫描,这些限制在“direct path read”上会不会有所不同呢?如果你的运行系统是一个数据仓库,需要花费大量的时间运行这种操作,那么这些就是你需要回答的问题.(例如,参见我3年前写的关于运行并行查询时的部分IO异常的记录,以及Christian Antognini在大约几年后描述的Oracle 11g中的一个相关改进.)</p>
<p>只有当你开始想清楚你理解“碎片”到底是什么,你才可以理解它可能导致的问题,以及为什么它会(或不会)对你的系统造成问题的理由. 在第二部分中,我将讨论你该如何考虑表级别以及表空间级别的碎片问题.</p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<p>这份笔记最初只是个便条,直到我认识到它的意义不仅与此,从而决定将此便条拓展成一份完整的说明,我计划在接下来的2个星期发表完下面四个部分.</p>
<ul>
<li>1. 介绍 &#8212; 此文</li>
<li>2. 磁盘与表空间碎片</li>
<li>3. 表碎片</li>
<li>4. 索引碎片</li>
</ul>
<p><strong><a href="http://jonathanlewis.wordpress.com/2010/07/13/fragmentation-1/">介绍</a></strong><br />
By <a href="http://jonathanlewis.wordpress.com/">Jonathan Lewis</a> Translated By <a href="http://www.dbthink.com/">Jametong</a></p>
<p>单词“<strong>fragmentation</strong>”（碎片）的涵义是某些东西被分成多个片段,不过,有时也隐含表示被拆成了大量的小片段.在Oracle的语境下,需要仔细考虑你所说的“片段”,片段的粒度大小,以及其对性能产生的可能影响.由于可以在(逻辑)磁盘层面、文件层面、表空间(tablespace)层面、段(segment)层面、区间(extent)层面以及块(block)层面来讨论碎片,当你在评论种说出类似于“我的表空间有碎片”或“我的索引有碎片”时,需要仔细想清楚你到底想要说明什么.</p>
<p>让我从一个例子开始:我创建了一个新的表空间,并移入了一张表.当我检查<strong>dba_extents</strong>视图,将发现此表空间有100个区间.很明显,从这个单词的基本涵义看,它被“分成多片”了,它有100个不同的片段组成.另一方面,因为此表是我在此表空间内创建的第一个对象,我可以发现所有的区间都相邻,你可以说此表“逻辑上分成多片”但是“物理上连续”.</p>
<p>这个碎片的例子会不会影响你的系统的性能呢？由于大部分Oracle IO都是在块级别上完成(我们将数据块读入到数据库高速缓冲区,我们将数据块写入到数据文件),任何特定区间内的数据块的位置都是无关的,答案或许是no.但有些时候,当我们在一个单一读请求(<strong>全表扫描 (TableScan)</strong>或者<strong>索引快速全扫描(Index Fast Full Scan)</strong>)中尝试读取多个相邻的数据块时;如果我们的“物理上连续”的表却是“逻辑上被拆分”到了很多个区间,这会不会有问题呢?</p>
<p>假如说,每个区间都只能是64K,这会限制我们将发起的“<strong>db file multiblock read</strong>”请求的大小吗或者这些请求可以跨越区间边界读取吗?如果这个表空间是有两个(或多个)数据文件组成,而这些区间又是以“轮流”在两个文件之间分配的,这会影响读操作的方式吗?如果我们尝试进行并行表扫描,这些限制在“<strong>direct path read</strong>”上会不会有所不同呢?如果你的运行系统是一个数据仓库,需要花费大量的时间运行这种操作,那么这些就是你需要回答的问题.(例如,参见我3年前写的<a href="http://jonathanlewis.wordpress.com/2007/05/29/autoallocate-and-px/">关于运行并行查询时的部分IO异常的记录</a>,以及Christian Antognini在大约几年后描述的<a href="http://antognini.ch/2009/08/system-managed-extent-size-11g-improvements/">Oracle 11g中的一个相关改进</a>.)</p>
<p>只有当你开始想清楚你理解“碎片”到底是什么,你才可以理解它可能导致的问题,以及为什么它会(<strong>或不会</strong>)对你的系统造成问题的理由. 在第二部分中,我将讨论你该如何考虑表级别以及表空间级别的碎片问题.</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/dbthink/~4/WC8RDGxa864" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbthink.com/?feed=rss2&amp;p=584</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dbthink.com/?p=584</feedburner:origLink></item>
		<item>
		<title>Buffer和Cache的区别</title>
		<link>http://feedproxy.google.com/~r/dbthink/~3/UoC1Kwax_1s/</link>
		<comments>http://www.dbthink.com/?p=579#comments</comments>
		<pubDate>Mon, 26 Jul 2010 03:50:57 +0000</pubDate>
		<dc:creator>jametong</dc:creator>
				<category><![CDATA[My Reading]]></category>
		<category><![CDATA[buffer]]></category>
		<category><![CDATA[buffer 与 cache 的区别]]></category>
		<category><![CDATA[buffer cache]]></category>
		<category><![CDATA[buffer vs cache]]></category>
		<category><![CDATA[cache]]></category>

		<guid isPermaLink="false">http://www.dbthink.com/?p=579</guid>
		<description><![CDATA[<p>今天, 又在公司内听到大家争论 Buffer 与 Cache的差异了, 虽然差不多1个月前, 我们就已经在群组里面进行过激烈的争论, 我在网上搜索了下, buffer 与 Cache 区别, 找到下面这个链接, 给出的解释比较接近为维基百科上的说法, 抄录如下, 以为记.</p>
<p>什么是Cache？ 什么是Buffer？ 二者的区别是什么？</p>
<p>http://wenda.tianya.cn/wenda/thread?tid=595a1d68b3009fed</p>
<p>Buffer和Cache的区别
buffer与cache操作的对象就不一样。</p>
<p>buffer（缓冲）是为了提高内存和硬盘（或其他I/0设备）之间的数据交换的速度而设计的。</p>
<p>cache（缓存）是为了提高cpu和内存之间的数据交换速度而设计，也就是平常见到的一级缓存、二级缓存、三级缓存。</p>
<p>cpu在执行程序所用的指令和读数据都是针对内存的，也就是从内存中取得的。由于内存读写速度慢，为了提高cpu和内存之间数据交换的速度，在cpu和内存之间增加了cache，它的速度比内存快，但是造价高，又由于在cpu内不能集成太多集成电路，所以一般cache比较小，以后intel等公司为了进一步提高速度，又增加了二级cache，甚至三级cache，它是根据程序的局部性原理而设计的，就是cpu执行的指令和访问的数据往往在集中的某一块，所以把这块内容放入cache后，cpu就不用在访问内存了，这就提高了访问速度。当然若cache中没有cpu所需要的内容，还是要访问内存的。</p>
<p>缓冲（buffers）是根据磁盘的读写设计的，把分散的写操作集中进行，减少磁盘碎片和硬盘的反复寻道，从而提高系统性能。linux有一个守护进程定期清空缓冲内容（即写入磁盘），也可以通过sync命令手动清空缓冲。举个例子吧：我这里有一个ext2的U盘，我往里面cp一个3M的MP3，但U盘的灯没有跳动，过了一会儿（或者手动输入sync）U盘的灯就跳动起来了。卸载设备时会清空缓冲，所以有些时候卸载一个设备时要等上几秒钟。</p>
<p>修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0～100，数字越大越倾向于使用swap。默认为60，可以改一下试试。&#8211;两者都是RAM中的数据。</p>
<p>简单来说，buffer是即将要被写入磁盘的，而cache是被从磁盘中读出来的。</p>
<p>buffer是由各种进程分配的，被用在如输入队列等方面。一个简单的例子如某个进程要求有多个字段读入，在所有字段被读入完整之前，进程把先前读入的字段放在buffer中保存。</p>
<p>cache经常被用在磁盘的I/O请求上，如果有多个进程都要访问某个文件，于是该文件便被做成cache以方便下次被访问，这样可提高系统性能。
</p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<p>今天, 又在公司内听到大家争论 Buffer 与 Cache的差异了, 虽然差不多1个月前, 我们就已经在群组里面进行过激烈的争论, 我在网上搜索了下, buffer 与 Cache 区别, 找到下面<a href="http://wenda.tianya.cn/wenda/thread?tid=595a1d68b3009fed">这个链接</a>, 给出的解释比较接近为<a href="http://en.wikipedia.org/wiki/Cache#The_difference_between_buffer_and_cache">维基百科</a>上的说法, 抄录如下, 以为记.</p>
<p>什么是Cache？ 什么是Buffer？ 二者的区别是什么？</p>
<p>http://wenda.tianya.cn/wenda/thread?tid=595a1d68b3009fed</p>
<blockquote><p>Buffer和Cache的区别<br />
buffer与cache操作的对象就不一样。</p>
<p>buffer（缓冲）是为了提高内存和硬盘（或其他I/0设备）之间的数据交换的速度而设计的。</p>
<p>cache（缓存）是为了提高cpu和内存之间的数据交换速度而设计，也就是平常见到的一级缓存、二级缓存、三级缓存。</p>
<p>cpu在执行程序所用的指令和读数据都是针对内存的，也就是从内存中取得的。由于内存读写速度慢，为了提高cpu和内存之间数据交换的速度，在cpu和内存之间增加了cache，它的速度比内存快，但是造价高，又由于在cpu内不能集成太多集成电路，所以一般cache比较小，以后intel等公司为了进一步提高速度，又增加了二级cache，甚至三级cache，它是根据程序的局部性原理而设计的，就是cpu执行的指令和访问的数据往往在集中的某一块，所以把这块内容放入cache后，cpu就不用在访问内存了，这就提高了访问速度。当然若cache中没有cpu所需要的内容，还是要访问内存的。</p>
<p>缓冲（buffers）是根据磁盘的读写设计的，把分散的写操作集中进行，减少磁盘碎片和硬盘的反复寻道，从而提高系统性能。linux有一个守护进程定期清空缓冲内容（即写入磁盘），也可以通过sync命令手动清空缓冲。举个例子吧：我这里有一个ext2的U盘，我往里面cp一个3M的MP3，但U盘的灯没有跳动，过了一会儿（或者手动输入sync）U盘的灯就跳动起来了。卸载设备时会清空缓冲，所以有些时候卸载一个设备时要等上几秒钟。</p>
<p>修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0～100，数字越大越倾向于使用swap。默认为60，可以改一下试试。&#8211;两者都是RAM中的数据。</p>
<p>简单来说，buffer是即将要被写入磁盘的，而cache是被从磁盘中读出来的。</p>
<p>buffer是由各种进程分配的，被用在如输入队列等方面。一个简单的例子如某个进程要求有多个字段读入，在所有字段被读入完整之前，进程把先前读入的字段放在buffer中保存。</p>
<p>cache经常被用在磁盘的I/O请求上，如果有多个进程都要访问某个文件，于是该文件便被做成cache以方便下次被访问，这样可提高系统性能。
</p></blockquote>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/dbthink/~4/UoC1Kwax_1s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbthink.com/?feed=rss2&amp;p=579</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.dbthink.com/?p=579</feedburner:origLink></item>
		<item>
		<title>Oracle Enqueue Lock介绍</title>
		<link>http://feedproxy.google.com/~r/dbthink/~3/jcKCcpB4l1c/</link>
		<comments>http://www.dbthink.com/?p=575#comments</comments>
		<pubDate>Sun, 25 Jul 2010 16:43:51 +0000</pubDate>
		<dc:creator>jametong</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[CF enqueue]]></category>
		<category><![CDATA[enqueue lock]]></category>
		<category><![CDATA[enqueue resource]]></category>
		<category><![CDATA[HW enqueue]]></category>
		<category><![CDATA[TX enqueue]]></category>

		<guid isPermaLink="false">http://www.dbthink.com/?p=575</guid>
		<description><![CDATA[<p>这是我准备今天下午给部门兄弟介绍的Enqueue Lock的ppt, 前面介绍部分纯理论部分没有做充分的测试,后半部分常用Enqueue Type的介绍, 都在以下环境做过测试.</p>
<p>OS : Windows XP (Intel T7250 ,3G mem) +
soft : Oracle 9201 32位</p>
Enqueue Lock介绍.ppt
View more presentations from james tong.



<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<p>这是我准备今天下午给部门兄弟介绍的Enqueue Lock的ppt, 前面介绍部分纯理论部分没有做充分的测试,后半部分常用Enqueue Type的介绍, 都在以下环境做过测试.</p>
<p>OS : Windows XP (Intel T7250 ,3G mem) +<br />
soft : Oracle 9201 32位</p>
<div style="width:425px" id="__ss_4833751"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/jamestong/enqueue-lockppt" title="Enqueue Lock介绍.ppt">Enqueue Lock介绍.ppt</a></strong><object id="__sse4833751" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=enqueue-lockppt239&#038;stripped_title=enqueue-lockppt" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4833751" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=enqueue-lockppt239&#038;stripped_title=enqueue-lockppt" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/jamestong">james tong</a>.</div>
</div>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/dbthink/~4/jcKCcpB4l1c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbthink.com/?feed=rss2&amp;p=575</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.dbthink.com/?p=575</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.972 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-09-02 01:57:04 -->
