Oracle Exadata一体机与云计算应用(二)

来源:互联网 发布:不能说的秘密知乎 编辑:程序博客网 时间:2024/04/29 01:04

3. Exadata主要技术

3.1 单元分流

  在数据库云服务器中,存储并不只是转储存储。存储单元有足够的智能在内部处理某些负载,这样可以减轻数据库节点的工作。此过程被称作单元分流。

3.2 智能扫描

  智能扫描是 Exadata最重要的一个功能,它的作用就是把SQL 放在每个Cell 上去运行,然后每个Cell只返回符合条件的数据给数据库,这样就极大的降低了数据库服务器的负载和网络流量,并充分利用了Cell的计算资源和IO资源。
  在传统 Oracle 数据库中,当用户选择一行甚至是一行中的单个列时,包含该行的整个数据块都会从磁盘读取到缓冲区缓存,然后从该数据块提取所选的行(在某些情况下是列)并将其提供给用户会话。在数据库云服务器中,大多数类型的访问都采用这一过程,但有几种非常重要的类型却不是这样。直接路径访问(例如全表扫描和全索引扫 描)的过程与此不同。数据库云服务器可以直接从磁盘提取特定行(或列)并将其发送到数据库节点。此功能称为“智能扫描”,可以极大地减少 I/O。
  例如有 10 亿行数据,其中只有 1,000 行与您的查询相匹配,但传统数据库中的全表扫描会检索所有数据块并从中筛选出这些行。而智能扫描将只提取这 1,000 行(甚至是这些行中的特定列,如果所请求的是列的话)— 这可能减少 I/O 一千万倍!单元分流支持单元实现此操作。


  这里有一点要注意,在使用智能扫描时,每个Cell返回给DB Server的是结果集,而不再是传统的Block,数据库服务器完成结果集的处理,并返回给客户端。

3.3 存储索引

  智能扫描如何实现只发送相关的行和列而不是块?这要归功于存储单元内部的数据模式上构建的特殊数据结构。对于特定段,会将该段的所有列的最小值、最大值以及是否存在空值的信息存储在磁盘上的指定区域(通常大小为 1MB)。此数据结构称为存储索引。

  当单元收到来自数据库节点的支持智能扫描的查询时,它将检查存储的哪些区域不含相应数据。例如,如果查询谓词声明 where B = 1,则磁盘上列 B 的最小值和最大值分别为 3和8 的区域将肯定不会有任何匹配该谓词的行。因此单元将跳过不读取磁盘的该部分。通过检查存储索引,单元可排除不会包含该值的许多区域,因此可减少大量 I/O。

  尽管存储索引在名称中有“索引”这个词,但它与普通索引完全不同。普通索引用于瞄准最有可能找到行的位置;存储索引则用于完全相反的目的 — 它关注的是最没可能找到行的位置。而且,与其他段不同,这些段不是存储在磁盘上;而是驻留在内存中。


3.4 混合列压缩

  首先我们要搞清楚,什么是行压缩,什么叫列压缩。我们熟悉的数据库,如Oracle、MySQL等都是基于行的数据库,就是行的不同字段物理上存放在一起,还有一种是基于列的数据库,就是每个字段的不同行物理上存放在一起。他们的优缺点同样突出:
  基于行的数据库,访问一行非常方便,但是由于同一列的数据是分开存放的,如果要针对某一列进行查询时,几乎要扫描整个表才能得到结果。基于行数据库的压缩,称为行压缩。
  基于列的数据库,因为同一列的数据物理上放在一起,所以访问一列非常方便,也就是说如果针对某一列进行查询时,不需要扫描整个表,只需要扫描这一列的数据就可以了,但是访问一行的全部字段非常不方便。基于列数据库的压缩,称为列压缩。

  Oracle 通常说的 compress 功能(包括11g R2的Advanced compress),都是行压缩,因为Oracle是个基于行的数据库。大概的方法就是在block头部存放一个symbol table,然后将相同的值放在那里,每行上相同的数据指向symbol table,以此来达到压缩的目的。行压缩的效果通常不好,因为我们知道行与行之间,其实相同的数据并不多。但是列压缩则不同,因为相同列的数据类型相同,很容易达到很好的压缩效果。


  行压缩和列压缩都有其优缺点,而Oracle的混合列压缩技术,实际上是融合了列压缩的高压缩比和行数据库的访问特性,将两者的优点结合起来。Oracle提出了 CU 的概念(compress unit),在一个 CU 内,是一个基于列的存储方式,采用列压缩,但是一个 CU 内保存了行的所有字段信息,所以在CU与CU之间,Oracle还是一个基于行的数据库,访问某一行,总是只在一个 CU 内(一个CU总是在一个block内)。


  如上面的示意图,从高一层抽象上看,引入了一个新的叫做压缩单元(compression unit,cu)的结构用于存储混合列压缩的行的集合。新的数据载入后,列值追加到旧有的行集合的后面,然后进行排序与分组等操作后进行压缩。这一系列动作完成后,组成一个压缩单元。直接一点说,也就是对列存储做分段处理,而压缩单元用来维系不同分段之间的关系。有个特别之处是,要使用批量装载(Bulk Loading)的方式,对于已经存储的数据依然可以应用 DML 操作。而 Exadata 引擎对待已经存入的数据的策略是按需进行解压缩。

  这是与传统的 Oracle 数据库引擎所说的压缩截然不同的方式。至于数据仓库压缩与归档压缩的功能,看起来只是针对不同的场景而设置了不同的压缩密度而已。而 Oracle 之所以强调 Exadata 的压缩能力,我想更多是因为 Exadata 目前对于存储能力和价格上的限制吧。
  所以说混合列压缩,结合了列压缩和行访问的特点,即可以提供非常高的压缩率,又很好的保证了基于行类型的访问。下面给出使用混合列压缩应用在Oracle EBS的实际环境中的压缩效果图:

3.5 智能缓存

  数据块在被发送给最终用户之前存放在数据库缓冲区缓存中。如果在此找到数据,则不必往返访问存储。但如果未找到(大型数据库就可能出现这种情况),则不可避 免地需要 I/O。在数据库云服务器中,在数据库缓冲区缓存和存储之间可存在二级缓存,称为“智能缓存”。智能缓存保存频繁访问的数据,该缓存中的数据可能满足数据库节点的请求,因而有可能不必转到磁盘,从而可以提升性能。
  Oracle 数据库与 Exadata 密切合作,对经常访问的数据进行缓存。当数据库向Exadata Storage Server 发送读或写请求时,请求中会包含额外信息,表明是否有可能再次读取该数据以及因此是否应对其进行缓存。Exadata Storage Server Software 根据数据库发送的信息智能地确定哪些数据会被再次读取,因而值得进行缓存,而哪些不需要缓存。对表和索引进行的随机读取很可能有后续读操作,因此通常对其进行缓存,随后从闪存缓存中提供数据。而扫描(即顺序读取表)通常不对其进行缓存,因为按顺序访问的数据不太可能有相同的后续读操作。一般情况下,写操作会直接将数据写到磁盘上,如果软件认为后续还会再读取这些数据,就会将这些数据暂时放入缓存中。
  知道不缓存哪些数据对实现缓存性能非常重要。例如,对数据块进行重写、备份或镜像操作时,软件将避免对这些块进行缓存。因为近期不会再次读取这些块,所以不必将宝贵的缓存空间用于这些对象或块上。只有 Oracle 数据库和 Exadata Storage Server Software 具备此种可见性,能理解系统中进行的所有 I/O 操作的本质。由于具备对全部 I/O 操作的可见性,因此能够优化对 Exadata 智能闪存缓存的使用,只存储经常访问的数据。 该功能的所有操作均自动进行,无需客户配置或调整,并且大多数情况下充分利用了 Exadata 智能闪存缓存。
  Exadata 智能闪存缓存是 Exadata Database Machine 的 OLTP 功能背后的动力。它为要求 最为苛刻的数据库应用程序提供前所未有的 IOPS 且为仓库中数据或报告应用程序提供 两倍多的扫描速度,并为关键数据库日志记录功能提供特殊支持。通过了解要缓存的 数据和如何自动管理缓存,结合了 Exadata 智能闪存缓存的 Oracle Database 是市场上首 个且唯一一个支持闪存的数据库。


3.5 I/O资源管理

  使用传统存储时,由于无法确定使用存储子系统中的 I/O 带宽的不同作业和用户的工作的优先级,阻碍了共享存储网格的建立。当多个数据库共享存储子系统时也会发生这种情况。使用 Exadata存储时,Exadata 存储的 DBRM 和 I/O 资源管理功能可以防止一类工作或一个数据库独占磁盘资源和带宽,并确保满足用户定义的 SLA。DBRM 能够在数据库之间以及不同的用户与各类工作之间对使用的 I/O 带宽进行协调并确定优先级。通过将数据库与存储环境紧密集成,数据库云服务器可以知晓工作类型和使用的 I/O 带宽量。因此,用户可以让数据库云服务器系统识别各种类型的负载,为这些负载指定优先级,并确保最关键的负载得到优先处理。
  在数据仓储或混合负载环境中,您可能希望确保为数据库中的不同用户和任务分配相对适量的 I/O 资源。例如,您可能希望为系统上的交互式用户分配 70% 的 I/O 资源,为批处理报表作业分配30% 的 I/O 资源。这可以使用 Exadata 存储的 DBRM 和 I/O 资源管理功能很简单地实现。
  数据库云服务器管理员可以创建一个资源计划,指定应如何确定 I/O 请求的优先级。这可通过将不同类型的工作放入各个服务组(称为用户组)中来实现。用户组可以由多个属性定义,这些属性包括用户名、客户端程序名、函数或查询已运行的时间长度。定义这些用户组之后,用户可以设置一个层次结构,规定哪个用户组享有 I/O 资源的优先权,以及为每个用户组分配多少 I/O 资源量。这种层次结构确定的 I/O 资源优先级可以同时应用于数据库内操作(即在数据库内发生的操作)和数据库间操作(即在不同数据库间发生的操作)。
  当多个数据库之间共享 Exadata 存储时,您还可以确定为每个数据库分配的 I/O 资源的优先级,从而防止一个数据库独占磁盘资源和带宽,以确保满足用户定义的 SLA。


  实际上,Exadata I/O Resource Manager 解决了传统存储技术无法应对的一个挑战:能够对共享存储子系统的多个数据库和用户的工作进行平衡和确定优先级,藉此建立共享网格存储环境。数据库云服务器 I/O 资源管理可确保针对共享 Exadata 存储的多个数据库满足用户定义的 SLA。这确保了每个数据库或用户均可获得适量份额的磁盘带宽以满足业务目标。

3.6 Exadata极限性能

弹性能力和极限性能保障:
  • 云架构: 支持在计算层面、存储层面、网络层面的并行和水平扩展
  • 存储索引:数据感知型的动态内存索引
  • 智能扫描: 查询负载下沉到存储层完成
  • 智能闪存: 支持实时随机I/O的存储
  • 数据压缩: 专门针对OLTP, 数据仓库和归档数据优化
  • Infiniband: 支持大数据传输的网络
  • 平衡的设计:木桶效应
资源池化:
  • Infiniband Partition:更安全更高效的硬件网络分区
  • ASM (自动存储管理) 所有数据库共享的存储
  • RAC (真实应用集群) 通过多节点实现大数据库共享
  • QoS 和 IORM (I/O 资源管理) 基于客户定义的SLAs 来管理服务器和存储资源
  • Instance Caging 实例锁定允许多个数据库在在一个节点内进行资源共享
  •   部署简单、快捷;数据加载、备份等批处理时间窗口显著降低。典型案例:某大型银行迁移到Exadata后,备份时间从12小时提到到1.5小时
  • 查询性能通常能够提升20~30倍
  • OLTP应用性能通常能提升8~10倍
  • 混合列压缩技术使数据仓库的压缩比通常达到10倍,对于OLTP的压缩比通常2~4倍
  • 降低机房占用、节约能源,通常为原来系统的1/4面积和1/8能源
  • 性能大幅提升,可以减少索引的使用,节省了数据库空间、并降低管理的复杂程度

2 0