存档

2009年7月 的存档

为什么说RAC是一个好的数据仓库解决方案,但我不认为它是一个好的OLTP解决方案。因为在OLTP系统中,过多的cache fusion会大大降低系统的性能,所以Oracle也建议尽量在不同的节点部署不同的应用,尽量减少交叉访问。所以OLTP应用的RAC的节点数不会很多(一般为2-3个),因为节点越多,管理的成本就越高,目前的很多OLTP应用都是用RAC来提供HA方面的特性,OLTP应用还是采用分布式架构比较合适,指望RAC来得到线性扩展的能力不太可能。
数据仓库应用则不同,因为任务之间比较独立,在加上数据仓库的应用主要是并行计算,这样就可以充分利用RAC节点间并行处理能力,这样RAC的节点数就可以有很多,几乎可以做到线性扩展。这时新的问题出现了,我一直说Oracle RAC的最大问题在于IO吞吐量受限于共享存储,不管是中端还是高端存储,吞吐量往往受限于存储本身的架构,所以单台存储的吞吐量总是有限的。
我们能否用廉价的PC设备堆叠一个可线性扩展的存储呢?

利用Oracle ASM和iscsi,我们可以搭建一个廉价的数据仓库解决方案,底层的数据节点可以选用专门的PC服务器,现在很多厂商都有类似产品,一台PC机可以挂24块SAS/SATA磁盘,通过iscsi输出到每台数据库主机,因为RAC要求共享存储,所以我们用网络交换机把所有数据节点和数据库节点全部连起来。用Oracle ASM管理存储,利用ASM做mirror和stripe,把IO分散到所有的数据节点上,并且还可以做到动态迁移。ASM的failgroup可以分别定义在不同的数据节点上,这样就算坏掉一个数据节点,对整个系统依然不会有影响。用iscsi主要是考虑成本,当然可以把数据节点换成存储,把iscsi换成FC。
Oracle有一篇软文介绍淘宝数据仓库系统,号称全球最大的RAC系统,这套系统有20个节点,但是并没有提到存储,我们可以设想,如果采用单一存储架构,那要多大的一个存储呢?其实……
这个架构并没有经过测试,如果Oracle有兴趣的话,可以搭一个系统测试一下,如果真的是便宜量又足,能否给我一个ACE混混?
–EOF–

7 30th, 2009 | Filed under 大话技术
标签:

说起Greenplum这个产品,最早是SUN来推他们的数据仓库产品DWA时接触到的,对这个由PgSQL堆叠出来的数据库产品还不是很了解,当时的焦点还在DWA本身的硬件上,当然不可否认,DWA还是有一些特点的。
后来,我们发现普通的PC+SAS磁盘具备非常好的吞吐能力,完全不逊于某些昂贵的存储设备。这样我们就尝试用PC+Greenplum搭建了一个环境,效果完全超出了我们的预期,吞吐量完全超过了我们的大型存储。从那时开始,我们不再迷信那些昂贵的主机和存储,开始尝试一些新的东西,比如用PC+SAS/SATA来堆叠廉价存储,用Greenplum来搭建数据仓库计算环境,搜索的hadoop集群,PC+SSD搭建OLTP数据库,用Intel Nehalem来替代小型机等等。
昨天,去参加了数据仓库部门关于Greenplum的一个技术分享,期间大量列举了一些性能数据的对比,尤其是和当前的一套Oracle RAC的对比。结果不言而喻,在数据仓库的应用上,尤其是大数据量的处理,性能相差悬殊。这时问题就来了,很多人感觉这个产品太神奇了,可以解决数据仓库的一切问题,好像它就是上帝赐予我们的礼物。最后好多人都在问:Oracle太烂了,用这么好的设备,性能还这么差,我们干嘛还要用?呜呼哀哉,Greenplum是好,但并不“神奇”,我们不要被这些”神奇“的数据挡住了视线。
对于Greenplum,我其实也处于一知半解的状态,给大家讲原理未免有些力不从心,这里只简单给大家分析一下Greenplum为什么会快?他用了什么”神奇“的技术?
如何提升数据仓库的处理能力,有以下两个主要因素:第一,吞吐能力,就是所谓的IO;第二,并行计算能力。
我们都知道Oracle RAC是shared everything架构,而Greenplum是shared nothing架构。整个集群由很多个segment host(数据节点)+master host(控制节点)组成,其中每个segment host上运行了很多个PgSQL数据库(segment)。

数据在进入数据库时,首先要做数据分布的工作,即把一个表的数据尽可能均匀的分布到每个segment上,我们需要为每个表指定一个distribute列,然后根据hash来做数据分布。这样做的目的就是要充分利用每个节点的IO能力,我们知道现在PC机的IO能力相当可观,象DWA这种专门设计的数据节点,Sun Fire X4500 Server,在一个box内集成了48块SATA盘,号称“Scan 1 Terabyte of data in 60 seconds”。其实没必要买DWA,国内厂商都有那种磁盘密集型的PC,价格便宜量又足,我们一直用它。

很多人在看到Greenplum架构的时候,第一个问题就是master机器承担了什么功能?它会不会成为系统的瓶颈?这也是Greenplum系统的一个重要特点,master只承担非常少量的控制功能,以及和客户端的交互,完全不承担任何计算。如果存在一个中心节点的话,那意味着这个系统根本没有办法线性扩展,因为master一定会成为系统的瓶颈。而Greenplum不存在这个问题,节点间的数据交互,不需要经过master,而是直接在节点间就完成了。
现在,如果我们要查询某个表的数据,只要把工作分配给每个节点就行了,IO不再是问题,接下来要解决并行计算的问题,核心问题是多表做join。因为表是通过DT列做分布的,所以每个节点通过DT列就知道数据在某个节点上,假设两个表用DT列做join,因为相同的数据都在相同的节点上,所以只需要对应节点计算,然后合并结果就可以了。如果是非DT列做join,因为节点间不知道数据的分布,所以就会做一个数据重分布的过程(redistribute)。我们看下面的例子,三个表都是用id列作为DT列,首先用id做join,因为设计到非DT列的join,这时Greenplum会作redistribute的工作,作用就是重新按照hash做数据分布,这样做的目的就是要让节点知道数据在哪个节点上,以便完成join的动作。我们看到后面的group by也做了redistribute,因为group by的也是非DT列,而hash aggregate动作也需要节点间交互数据,节点间也必须知道数据的分布。如果有redistribute动作,效率会高吗?因为redistribute仅仅只针对需要的数据,而且全部在节点cache中完成,肯定要比DT列做join慢一些,但是效率还是非常高的。
Bride Wars download Somewhere in Time divx
Greenplum真正发挥了并行无处不在的优势,在一个主机上同时启动多个PgSQL数据库,这样硬件上的多核CPU就可以充分发挥优势。有人问我:Greenplum能并行处理多个任务吗?回答是:不可能。因为Greenplun已经将机器的IO和处理能力全部发挥出来了,再没有可能同时处理多个任务。
Greenplum还有一个有意思的特性就是在数据装载时,不是我们一般想象的存在一个中心的数据分发节点,而是所有节点同时读取数据,然后根据hash算法,将属于自己的数据留下,将其他的节点的数据通过网络直接传送给他,所以数据装载的速度非常快。
Greenplum HA架构

现在来看Greenplum并不神奇,其实Oracle RAC也是数据仓库非常好的解决方案,类似的技术Oracle全部都有。我们可以这样来做一个假设,如果针对某个固定的SQL,我可以同样用Oracle RAC来做Greenplum做的事情,根据SQL,我们可以把表做 Hash+Range分区(事实上Greenplum也是hash+range分区,用hash将数据分布到不同的数据库上,然后再用range将每个数据库上的表做分区),再利用RAC的并行处理能力。Oracle也有partition-wise join这种类似功能,但是没有数据redistribute的操作。Oracle最大的问题还是在于shared everything的架构,导致IO的处理能力有限,我们的大型存储吞吐量也就1.4GB/S,而且扩展能力也有限。以前曾经介绍过的Oracle database machine,就是Oracle专门为数据仓库的提供的解决方案。
其实并存在什么神奇的技术,Greenplum之所以神奇是因为我们的场景发挥了他的特点,其实我们也可以设计一个场景来得到Greenplum很烂的结论,所以不要相信厂商的数据,不要相信什么可以解决一切问题的技术,那根本不存在。
”不要迷恋哥,哥只是传说。“
–EOF–

7 24th, 2009 | Filed under 大话技术

最近一直没更新,一是被家事所累,没什么业余时间,二是技术上也没什么东西。
周日,宝宝跟着外婆回老家了,这是个无奈的决定。父母们身体都不好,而且都不愿意和我们一起住,我们还要挣钱养家,也没有办法全职在家带宝宝。有时候,我觉得生活真得好痛苦,因为不管我怎么努力,都没法让周围的人快乐一点。其实,我知道大部分时候他们都是向我发发牢骚而已,并没有期望从我这里找到答案。这种生活的压力和对家人的责任感,压得我喘不过气,相比较而言,工作对我来说就好像是度假一样。从另一个角度看,我现在很幸福,每周有五天假期,只上两天班。
装修快接近尾声了,本来想写一篇文章叫《装修这个事》,后来还是写不下去,因为在整个过程,我丝毫没有体会到快乐。总结一句话就是:装修就是不断提高预算,并不断降低期望的过程。我现在只想着这个事尽快结束,让我过上正常人的生活。到时候,约几个朋友一起去家中坐坐,也许到那时会觉得这些付出都是值得的。
部门的老大们,一个换了辆BMW325,一个换了辆奔驰C280,这让我看到了生活的希望,因为他们换了奔驰宝马,也许过几年,我们也有机会换辆好车。两位老大作为技术人员出身,能够有今天的成就,实属不易。我们在羡慕他们的时候,更应该看到过去他们的付出。我们可以羡慕他们,但是没必要自卑,因为我们还有机会。也许哪天我也能开上BMW M3,给LP买辆MINI。
简单生活,享受生活,这是我追求的生活方式。人要过得快乐,过得充实,调整好心态很重要,当我们能用宽容的心态去对待别人,用乐观的精神去面对困难,也许生活中就没那么多痛苦了。
–EOF–

7 6th, 2009 | Filed under 一地鸡毛
标签:

AU
ASM的最小分配单元,默认是1M,可以在创建diskgroup时指定。在diskgroup中的每个盘都被切分为很多个AU,可以是1, 2, 4, 8, 16, 32, or 64MB。
File Extent
由一个或多个AU组成,一个file extent总是在一块磁盘上(不跨磁盘分配AU),这里的file extent和数据库中的extent是不同的,我们可以这样理解,这里的file extent是物理容器,而数据库中的extent是逻辑概念。
下图是AU和file extent的示意图,可以看到刚开始时一个file extent对应一个AU,到达某个数量级后,一个file extent对应8个AU,Oracle称之为Variable size file extent.

Mirror和Stripe
ASM如何做mirror和stripe,其实我们可以把ASM想象为一个存储设备,ASM的方式不是常见的磁盘对磁盘作RAID的方式,我猜测是类似于3PAR这种存储所采用的虚拟化方式,我们看看3PAR是如何处理的。3PAR将每块磁盘都切分为256M的单元(称为chunklet),创建logical disk(定义RAID类型),我们假设为RAID 10,系统自动选取不同磁盘上的chunklet先作mirror,然后再在这些mirror后的chunklet pair上做stripe,条带跨在logical disk上的所有物理磁盘,这样做的好处是因为磁盘被切分为很小的单元,可以实现动态负载迁移。而我们通常的存储,是要先固定的选取一些磁盘,比如8块磁盘,然后创建RAID group,然后在RAID group上创建逻辑盘,这种方式RAID group是固定的,除非重建否则没有办法动态调整。
Oracle ASM也有动态负载迁移的功能,我想Oracle应该是采用差不多的方式,所以Oracle也对磁盘首先划分为AU,AU组成了file extent,然后用file extent来做mirror,但并不是磁盘相同位置的extent来作mirror,Oracle只确保mirror的extent在不同的磁盘或者failure group上。有人问我一个问题,Oracle ASM是RAID10还是RAID 01,我的回答是从AU的角度去看,ASM是RAID 10,因为是先做了mirror,再做stripe。但是如果从磁盘的角度去看,因为不存在两个镜像盘的概念,所以它不是RAID 10,而是介于两者之间的一个东西。假设一个disk group中坏了一块磁盘,这时如果另一个disk group中包含了损坏的disk group上的mirror AU的磁盘也同时损坏,这个ASM就不可以恢复了。但ASM不是RAID 01,因为一个disk group中坏掉一块磁盘,并不意味着整个disk group坏掉,因为RAID 01的概念也是针对于磁盘的。
ASM的stripe有两种,分别是fine和Coarse,fine的stripe depth是128K,coarse的stripe depth等于AU的大小,默认是1M。Oracle对不同文件的条带大小是不同的,数据文件的条带是1M,而redo等小文件的条带是128K。Oracle的条带是跨在disk group的所有磁盘上,假设某个disk group有8块磁盘,当Oracle需要分配1M的extent时,如果stripe size是128K,则在每块磁盘的AU上分配128K,如果stripe size是1M,则在第一个磁盘上分配一个AU(这时实际上就没有stripe了)。如果Oracle需要分配4M的extent,而stripe size是128K,则在第一个磁盘分配128k,依次类推到第8块磁盘,然后接着从第一块磁盘开始分配,最后每个disk上分配了512K的空间(但是不连续的),而stripe size是1M,则在前四个disk上各分配一个AU。
从Oracle的角度看,extent是逻辑连续的,而ASM则根据stripe将其分散在不同的物理磁盘上,由ASM来维护AU,file extent,Oracle extent的对应关系,其实ASM就是一个存储管理软件。
–EOF–

7 3rd, 2009 | Filed under 大话技术
标签: