Oracle Exadata初探
Exadata是什么?
在我们看来,它是一个把硬件和软件根据合理的配置整合在一起的 Oracle数据库(在本文编写时是11gR2版本)平台。Exadata数据库机器包含了存储子系统,在存储层上运行着研发的新软件,这使得研发人员可以做一些在其他平台上无法完成的事情。
实际上,Exadata一开始是以一个存储系统形式诞生的,如果你跟参与研发此产品的人交谈,你经常会听到他们称存储组件为Exadata或者是SAGE (Storage Appliance for Grid Environments,网格环境存储设备),这是该产品研发项目的代码名称。
Exadata原本设计用来解决超大型数据库所存在的普遍性能瓶颈,也就是无法(在可接受时间内)从磁盘存储系统向数据库服务器传输足够大量的数据。Oracle一直以来都提供了非常快速的数据访问方式,主要是通过非常聪明的缓存技术,但是当数据库容量开始扩大到无法高效使用缓存技术的时候,Oracle开始寻找一种解决方案,可以有效解决存在于存储层和数据库层之间的瓶颈。他们想出的解决方案是融合了硬件和软件的组合拳。如果你仔细想一下,也可以知道有两种方法可以减小这个瓶颈,第一种是让传输管道更大,虽然有很多组件参与其中,不过你可以简单地认为Infiniband就是这个更大的管道;第二种方法是减少需要传输的数据量,这是通过智能扫描(Smart Scan)来完成的。这套组合非常成功地解决了问题,但是不要误会,通过智能扫描实现的后者(第二种方法)才是真正的制胜秘诀。
Kevin说:如果前提是尽可能地减少对于Oracle数据库核心功能的修改的话,作者们对于减轻数据仓库/商业智能系统的存储和服务器之间瓶颈的方法论描述是正确的,不过实际上,从一个纯粹的计算机科学角度看,存储和服务器之间数据流问题的解决方案中还应该包括划分多个数据库实例读取数据的方法,也就是“shared-nothing”这种MPP方法。虽然这也值得一提,不过还是不把时间浪费在讨论Oracle并未采用的方案上了。
Kevin说:在我看来,数据仓库/商业智能从业者,在Oracle环境中,如果对Exadata感兴趣,那么在了解Exadata其他方面之前,最应该先了解的是存储节点卸载(Offload)处理,而所有的其他技术都只是为了支持存储节点的卸载处理。比如,过早过多地关注Exadata Infiniband组件,就并非是深刻理解整个技术的最好方式,换句话说,我们在观察细节之前最好先欣赏全局。当我做Exadata主题培训的时候,我都是从存储节点卸载处理开始,讲解下面四个概念。
存储节点卸载处理(Cell Offload Processing):该工作由存储服务器完成,否则就必须在数据库服务器上执行。它包括的功能有智能扫描、数据文件初始化、RMAN offload和混合列式压缩解压(在没有内存并行查询的场景中)。
智能扫描(Smart Scan):这是存储节点卸载处理中与提高数据仓库/商业智能查询性能的最有关系的操作,智能扫描是将数据文件初始化、字段投影、存储索引消减以及HCC解压等操作卸载到存储节点的方法。
全表扫描或者全索引快速扫描(Full Scan or Index Fast Full Scan):为了触发智能扫描,查询优化器选择的必要的访问方法。
直接路径读取(Direct Path Read):智能扫描需要的缓存模型,智能扫描的数据流是无法缓存在SGA缓冲池中的。直接路径读取可以串行也可以并行,缓冲在进程的PGA(heap)中。
Exadata概览
一图胜千言。图1-1展示了组成Exadata数据库机器的各部分的轮廓。
当考虑Exadata的时候,如果在思想上将整个系统划分为两个部分会更好理解,即存储层和数据库层。两层之间用Infiniband网络来连接,Infiniband提供了低延迟、高带宽的光纤通信链路,也提供了链路上的冗余和联结(bonding)。数据库层由多个Sun服务器组成,运行着Oracle 11gR2软件,虽然RAC实际上并不是必须的,但是这些服务器通常还是配置成一个或多个RAC集群。
数据库服务器使用ASM来管理存储,即使数据库并不是配置成RAC,ASM也是必须的。存储层同样由多个Sun服务器构成,每个存储服务器都包含12块磁盘,并且运行着Oracle存储服务器软件(称之为cellsrv)。两层之间的通信通过iDB协议完成,这是一种使用Infiniband来实现的网络协议,iDB用来将请求和请求的元数据(比如说查询谓词)传输到cellsrv中,在某些情况下,cellsrv可以利用请求元数据来访问需要的数据,而后再将结果传输回数据库层。当cellsrv如此运作的时候,就被称为智能扫描,通常因此将会极大减少需要传输回数据库层的数据量。当无法使用智能扫描的时候,cellsrv就会返回整个Oracle数据块。iDB使用的是RDS协议,这是一种低延迟的协议,跳过了内核调用,在Infiniband网络中通过远程直接内存访问(RDMA)来完成进程间通信。
Exadata的历史
自2008年首次发布以来,Exadata已经经历了好几次重大变革。以下简要回顾产品的沿袭和与时俱进的变迁。
Kevin说:我想分享一些历史。在Exadata之前,我们有一个SAGE——网格环境存储设备,这大概可以称为V0。实际上直到为了在2008年的Open World时大张旗鼓地跟惠普一起缔造一个超强联合品牌,拉里埃里森将之命名为Exadata之前的一星期,它还一直被称为SAGE。虽然SAGE的第一个实现版本完全采用了HP的硬件,不过Oracle始终没有认为这个平台一定要运行于HP硬件之上,在Oracle收购Sun后,Exadata平台更是完全地采用了Sun的硬件。另一方面,Oracle也没有认为数据库主机一定要运行于Linux操作系统之上,事实上就在收购Sun成为事实之前,把iDB移植到HP-UX安腾平台的开发工作已经接近尾声了。要说SAGE的诞生,其实可以追溯到更早的时候。
V1:2008年末发布的第一款Exadata,被称为V1,融合了HP的硬件和Oracle的软件。整体架构跟现在的X2-2版本相似,除了Flash Cache部分(这是在V2版本中新加入的)。Exadata V1市场定位在纯粹的数据仓库平台。该产品广受关注但是并没有大面积部署,由于硬件过热带来的麻烦也让人头疼,总是听到“在机柜上都可以煎鸡蛋了”这样的说法。很多原先V1的客户后来都替换成了V2。
V2:2009年的Open World上发布了Exadata第2版本。这个版本是Sun和Oracle合作的产品。当发布该产品时,Oracle已经在尝试收购Sun微系统公司。很多组件都升级到更大更快的版本,不过最大的区别是V2采用了大容量的固态存储。存储节点升级为使用了384G的Exadata智能闪存,而软件也同样升级,以充分发挥这些新缓存的效能。这让Oracle可以将产品定位于不仅仅是数据仓库的平台,由此打开了一个更大的市场。
X2:2010年的Open World上发布了Exadata第3版本,被称为X2。实际上X2有两个独立的版本。X2-2依循的是V2的基本架构,但是数据库服务器升级到了8台双CPU服务器,CPU也升级到了6核,之前的V2是4核。另外一个X2版本是X2-8,它没有使用小型的1U数据库服务器,而是引入了更大的拥有8´8核CPU核、1T内存的更大的数据库服务器,由于具有更多的CPU和更大的内存,X2-8的市场定位是为大型OLTP系统或者混合负载系统提供更强劲、更稳定的平台。
本文节选自《深入理解Oracle Exadata》,本书由Kerry Osborne(凯里•奥斯本)、Randy Johnson(兰迪•约翰逊)、Tanel Põder(托内耳•卜戴德)著,黄凯耀,张乐奕,张瑞译,电子工业出版社出版。