Oracle Exadata技术解析

Oracle在今年旧金山的OOW大会上发布了自己和HP合作的第一款硬件产品——Exadata。Exadata包含主机 Database Machine和存储Exadata Storage Server两种产品,硬件产品由HP提供,Oracle提供软件支持。Oracle号称该款产品在数据仓库的环境下,相比传统的Oracle数据库有着数量级的性能提升。到底该产品有着怎样的改进和亮点才会让Oracle如此自信,下面我们就Exadata的配置和产品特性做一个简单的了解。

Exadata自带一个42U的标准机柜,一个机柜满配的情况下包含8台Database Machine服务器和14台Exadata Storare Server。以下是具体的硬件配置情况:

可以看到数据库服务器事实上就是HP的中端PC服务器-HP DL360 G5,配置2颗4核主频为2.66G Hz的Intel至强E5430 CPU,32GB内存,1块双卡口的Infiniband网卡,4块146G的本地SAS硬盘。而存储事实上就是一台插满12块本地硬盘的HP DL180 G5的PC服务器,配置为2颗4核主频为2.66G Hz的Intel至强E5430 CPU,8 GB内存,1块双卡口的Infiniband网卡,硬盘则为12块300G 15000转的SAS硬盘或者12块1TB 7200转的SATA硬盘。另外配置4个24口的Infiniband交换机,这4台交换机是互为冗余配置,分别给Database Machine之间的RAC内部互联使用,以及用于主机和存储的连接。当存储配置为SAS硬盘时,每台存储能够达到1GB/S的IO吞吐量,1TB用户可用空间(这个用户可用空间按Oracle的说法是指存储上面的盘经过镜像以后,并且排除日志文件、UNDO数据文件和TEMP临时文件占用空间后的的可用空间,不过这个指标应该是根据不同数据库的配置而异的,不具备通用的参考意义),整个机柜14台存储可以提供14GB/S的IO传输速度,14TB用户可用空间;存储配置为SATA硬盘时,能够提供750MB/S的IO吞吐量,3.3TB用户可用空间,整个机柜14台存储可以提供10.5GB/S的IO传输速度,46TB用户可用空间。软件部分,服务器和存储的OS都采用Oracle Enterprise Linux 5.1,数据库为了使用Exadata的一些特性,必须采用Oracle 11.1.0.7或者之后的版本。存储的软件则称为Oracle Exadata Storage Server Software 11g。

Exadata提供的最强大的功能便是Oracle宣称的Smart Scan的功能,这个功能Oracle能够在存储端直接进行SQL预处理。传统上我们对Oracle数据库进行查询时,整个过程如下图所示:

首先用户执行语句,Oracle确认该语句需要全表扫描并定位到哪些区间需要扫描,数据库向存储端发出把该表所有数据全部提取的请求,存储把该表高水位下的所有数据块全部返回给数据库(例子中该表有1TB之多,那么就需要把1TB的数据从存储返回给数据库),然后数据库再进行过滤,把用户需要的1000行数据返回给用户。事实上整个查询过程用户只需要1000行,2MB左右的数据,但是由于Oracle数据库的存储特性,决定了Oracle需要将整张表的数据从存储中提取出来返回数据库端,再在数据库端对数据进行过滤最终返回给用户。

而在Exadata中整个处理过程如下图所示:

用户执行完语句后,Oracle会将该语句转换成一句iDB(the Intelligent Database protocol,Oracle和Exadata存储通讯的协议,后续会详细介绍)命令语句发送给Exadata存储,Exadata中的每个单元智能地扫描该单元中表的数据块并将符合SQL语句条件所需要的行和列数据过滤出来返回给数据库,Oracle再把Exadata每个单元返回的数据汇合以后返回给用户。由于符合条件的结果集只有2MB之多,这样只需要从存储端返回2MB数据给数据库,再也不需要将1TB的全表数据返还,大大降低了存储到数据库的流量。由于存储具备了SQL预处理功能,存储到数据库的数据流量会有大量的减少,这样极大的减少了数据库的负荷,数据库的处理能力有了数量级的提升。这是 Oracle革命性的改进,之前从来没有一个数据库能够在存储底层就对数据进行过滤,而Oracle开创性地做到了这点!

Exadata的Smart Scan提供了行、列过滤的功能,可以在存储级别直接提取出用户所需的行数据和列数据。除此以外,Smart Scan还具备表连接处理功能,在存储级别直接进行表连接处理,最终再把连接好的结果集返回给用户。另外Smart Scan还能加快增量备份和创建表空间或者添加数据文件的速度。常规增量备份块记录变更是以一组块为单位,而Exadata中则是以单独的数据块为块变量记录单位,这样备份时对IO消耗的带宽更小。而在我们创建表空间或者添加数据文件时,我们都需要把数据文件从存储读取到数据库的内存进行格式化处理后再写进存储,这样有多大的数据文件我们就需要从存储端读取多大的数据到数据库层面再写入。而在Exadata中,Exadata只需要简单地执行一条iDB命令就可以将表空间创建好或者数据文件添加好,而不需要将数据文件读取到数据库里面进行格式化,大大加快了创建表空间或者添加数据文件的进程。

在Exadata中,每台Storage Server称为一个Exadata Cell。每个Exadata Cell配置一块具有512MB缓存带电池的RAID卡,一块双端口的Infiniband HCA卡,每个端口连接速度能够达到16Gb/s。如下图所示,一个标准的42U机柜最多可能容纳18台Exadata Cell,配置SAS硬盘的话存储容量能够达到65TB,如果配置SATA硬盘的话则容量为216TB。每个Exadata Cell上的HCA卡双端口分别接到两台不同的Infiniband交换机上以实现冗余。如果需要扩容的话,那么可以添加新的标准机柜,机柜之间的连接通过Infiniband相连。Oracle号称采用这种方式扩容以后,Exadata存储的容量和吞吐量都能够线性增长。

在Exadata中,存储的管理全部通过ASM进行,再也没有RAID的概念,所有数据的保护方式都基于ASM硬盘组的镜像和hot swappable Disk(相当于传统存储的hot spare磁盘的概念,防止单个硬盘的故障损坏)。ASM能够自动均匀地将数据条带分布不同的Exadata Cell中,使性能达到最佳。并且ASM的镜像方案能够访问Exadata中的单盘或者一台Exadata Cell的损坏而使数据不受丢失。每个Exadata Cell中的前两块硬盘都会划分出一个13GB的LUN供系统使用,这块空间称为System Area,用于存放Exadata的操作系统、软件及配置信息,这些信息会自动在这两块磁盘上进行镜像存放,防止单点故障。除去System Area,这两块盘剩余的空间都可以供用户使用。Exadata中的每块磁盘都自动划分为一个LUN。每块物理硬盘称为一个Cell Disk,每个Cell Disk可以划分为一个或者多个Grid Disk,每个Grid Disk对应一个ASM磁盘。划分如下图所示:

通常来说一个Grid Disk就对应一个Cell Disk,不过Oracle的方案中也可以把物理硬盘性能好的那部分空间划分为一个Cell Disk(具体怎么划分没有详细的信息,一般来说每块硬盘靠近外面扇面IO性能较好),性能较差的那部分空间划分为另外一个Cell Disk,然后可以把性能好的Cell Disk组成一个ASM磁盘组,性能差的Cell Disk组成一个ASM磁盘组,ASM磁盘组的镜像容灾方案可以再根据需求调整。整个方案如下图所示:

多个Exadata Cell组成给数据库使用的存储集合称为Realm,一个Realm可以供一个或者多个数据库使用。每台Exadata Cell的操作系统都是Oracle Enterprise Linux 5.1,可以供用户以受限模式访问,用户只能在上面做一些维护性的操作。正如之前所说,Oracle数据库和Exadata之间的通信协议通过iDB进行,iDB基于工业标准的RDSv3协议。iDB集成于Oracle数据库内核,能够将数据库的操作转换为iDB命令传递至Exadata端执行,传输的内容是结果集而不是传统意义上的数据块。当然像传统存储的传输协议一样,iDB在Smart Scan无法使用的情况下,能够直接读写磁盘上的数据。Exadata上的软件包含CELLSRV(Cell Services)、MS(Management Server)和RS(Restart Server)这三个部分。其中CELLSRV是最核心的部分,提供和Oracle实例的数据传输接口,数据传输都通过CELLSRV来进行的;MS主要用于日常管理维护Exadata及监控运行状态;RS的作用则是保障、监控Exadata服务的正常运行,如果哪个服务没有启动,它将会去重启这个服务。在OEM Grid Control中安装插件,OEM也可以方便地管理监控Exadata,在OEM中可以看到Exadata的配置信息、运行状况及性能信息,非常简单易用。

正如前面所说,一个Realm可以跟一台传统存储一样供多个数据库使用,但是传统存储无法控制不同数据库之间的IO消耗能力,有可能一个数据库把一台存储的IO使用完了,导致使用这个存储的其他数据库的IO性能受到影响。而在Exadata上则可以定制IORM(IO Resource Management),方便地将一个Realm中的IO资源分配给不同的数据库使用,比如一个Realm同时给A和B两个数据库使用,我们可以将40% 的IO资源给A使用,剩余60%的IO资源给B使用,方便地解决了同一存储不同数据库的IO需求冲突。

Exadata提供的这些强大的功能,革命性更改了Oracle数据库和存储之间传输数据的模式,使得Oracle在数据仓库环境下性能有了极大的提升,让我们共同期待Exadata的早日量产。