什么是Exadata Smart Scan?


近年来,Oracle Exadata凭借其更稳定可靠、更安全易用、更高效开放、更实时与灵活扩展等特点,被越来越多的客户应用到其各种应用场景的核心数据平台架构中。为了让更多的客户更深入地理解Exadata为大家带来的好处,Oracle近期更是开展了“揭开支撑Oracle运行的神器Exadata的美丽面纱 - 原理和实现介绍”的系列公益课(要看往期课程回放,点击下方阅读原文)。

在首期的Exadata公益课中,老师提到:Oracle研发Exadata的初衷,是去构建一个Oracle数据库运行的最佳平台,以解决传统数据库运行平台的首要问题:I/O系统存在明显的瓶颈。Oracle Exadata解决传统架构I/O瓶颈的灵魂做法是“Smart Scan”,接下来将借此机会为大家着重介绍“什么是Exadata Smart Scan”。

什么是Exadata Smart Scan?要回答这个问题,让我们首先看看传统的数据中心是如何运行的。我们知道数据库系统通常由三个组件或层次组成:计算层、存储层和网络层。

1.计算层:该层包含了处理来自用户的数据请求并将结果返回给用户的服务器,它是构成面向用户的应用程序的后端系统。假设您想通过在线预订应用程序购买一张机票,这个应用程序就会向数据库服务器发送一个请求,数据库服务器对相关数据进行处理后,将最终结果返回给应用程序。

2.存储层:这是数据实际驻留的地方。在这里,服务器将数据表中的数据作为一组数据块存储、保护并管理。

3.网络层:网络层位于计算层和存储层之间,并将数据块在计算层与存储层之间来回传递。

什么是Exadata Smart Scan?

这种传统数据中心结构(如上图)的问题在于,数据中心必须使用专门的存储和计算设备,而这些设备无法针对关键工作负载进行扩展。更重要的是,由于数据表中的所有数据块都是通过存储网络传输的,因此它可能会在网络层造成瓶颈。这一过程会消耗带宽,影响系统响应时间,并给计算层带来不必要的负担。

为了解决可扩展性问题并减少数据传输时间,各公司将计算、存储和网络整合到一个紧密集成的超融合基础架构中(如下图所示)。这个解决方案是为通用工作负载提供基本配置的折中方案,它提供了足够的存储和计算能力,但两者都不是最佳选择。此外,它并没有减少网络中交换大量数据所需的带宽。什么是Exadata Smart Scan?


Oracle Exadata采用了超融合基础架构,但是它通过在计算、存储和网络内部以及跨计算、存储和网络层集成了数据库感知的软件和硬件创新,从而使其更加智能。这些创新可带来巨大的性能改进,从而带来更快的数据处理效率。这些创新,其中就包含Smart Scan。

Exadata如何使用Smart Scan来解决传统架构中的 I/O瓶颈问题呢?

Exadata Smart Scan是一种颠覆式的、将传统数据库中的数据处理能力从数据库服务器卸载(Offloading)到存储层的优化方式。在Exadata中,所有符合条件的SQL都将直接推入(Offloading)到存储层,而不是进入计算层。在那里,基于查询的数据过滤在所有存储服务器上并行执行,然后将其计算出的结果(丢弃了不需要的行和列)发送给计算层。比如,在10,000个数据块中包含了1,000行您想要的结果数据,与传统架构读取10,000个数据块到数据库层,然后计算得到1,000行所需数据不同,Exadata Smart Scan是将相应SQL推入到包含所需数据的每个可用存储单元,然后由各存储单元并行执行一些带有访问和筛选谓词的工作,并各自只返回该存储单元中满足所提供的条件的行和列(Smart Scan Offloading还减少了节点之间的跨实例传输,从而减少了闩锁和全局锁。特别是闩锁,会消耗CPU周期。减少闩锁就等于进一步减少CPU周期,从而提高性能)。这样一来,因为在网络层传输的将只是一组计算后剩余的较小的相关数据块,所以这可以大大提高执行效率并消除网络层带宽瓶颈。

什么是Exadata Smart Scan?

比如说,您想知道哪些顾客在2月份花了500多美元买了一张机票。您将一个查询发送到Exadata系统,该系统将把它转发到存储层。在那里,Exadata使用智能扫描过滤掉低于500美元且不是在2月份预订的机票。一旦Exadata从存储中提取了相关客户,就会只将该数据发送到数据库服务器。然后,数据库合并结果并将其返回给客户端。将此与运行在传统或超融合系统上的数据库进行比较,后者会将表的很大一部分(比如把最终本应被丢弃的行和列仍然传输到数据库服务器中)从存储设备发送到计算设备,这很容易导致瓶颈。

Exadata智能扫描大大减少了数据库服务器中的CPU使用,加速了查询执行,并消除了网络瓶颈。

综上所述,我们可以看到,Exadata通过卸载数据处理到存储层,主要实现了3个目标:

1.减少磁盘系统和数据库服务器之间传输的数据量

2.减少数据库服务器上的CPU占用

3.减少存储层磁盘读取时间

其中,减少数据量是Exadata Smart Scan优化设计的主要目标。Smart Scan减少磁盘系统和数据库服务器之间的数据传输量,主要是通过列投影、谓词过滤、存储索引(当然还有更多其他技术)等优化方法来实现的。

1.列投影

列投影指的是Exadata通过仅返回感兴趣的列(也就是那些在SELECT列表中的列或者必须参加数据库层JOIN操作的列)来限制在存储层和数据库层之间传输的数据量的能力。如果您的查询从一个包含100个列的表中请求5列,那么Exadata则可以消除非Exadata存储原本会返回给数据库服务器的大部分数据。

2.谓词过滤

这是指Exadata能够仅将感兴趣的行返回到数据库层的能力。由于用于与Exadata存储单元交互的iDB协议在其请求中包含谓词信息,因此谓词过滤是通过在返回数据之前在存储层执行标准过滤操作来完成的。对于使用非Exadata存储的数据库,过滤是在数据库层完成的,这通常意味着最终会被丢弃的大量记录也要先返回到数据库层,而在存储层过滤这些行可以显著减少必须传输到数据库层的数据量。虽然这种优化还可以节省数据库服务器上的CPU使用,但最大的优点主要是减少了数据传输所需的时间。

3.存储索引

什么是Exadata Smart Scan?

存储索引为智能扫描提供了第三级优化。存储索引是存储单元上的内存结构,它为每个1MB的磁盘存储单元维护一个最大值和一个最小值,每个表最多有24个列(Oracle 12.2及以后版本)可以作为存储索引。存储索引与其他大多数Smart Scan手段略有不同,存储索引的目标不是为了减少传输回数据库层的数据量,而是为了缩减从存储服务器自身的磁盘中读取数据的时间。为了便于理解,您可以将存储索引看做另一种用于消减磁盘I/O的分区算法,它与分区裁剪相类似,我们知道,在分区表中,如果某个分区不会包含目标记录,那么该分区的数据块就不会被读取。同样的,存储服务器内存中的存储索引,包含了该服务器上每个1MB存储区间的数值分布,通过存储索引,如果确定一个存储区间不会包含目标记录,那么这个存储区间也无须被读取。

当然,Exadata Smart Scan用于减少存储层和数据库层之间的数据传输量的优化方法还有很多,本文不再展开详述。最后想强调一下:Exadata有关硬件本身其实没有什么神奇的地方,但Exadata通过在计算、存储和网络内部以及跨计算、存储和网络层集成了数据库感知的软件,其中的Smart Scan正是Exadata之所以显著区别于其他运行Oracle数据库平台的最大亮点。


参考资料

What Is Smart Scan? - Nancy Swanson

《Expert Oracle Exadata, Second Edition》 - Randy Johnson; Kerry Osborne; Frits Hoogland; Tanel Poder; Andy Colvin; Martin Bach; Karl Arao

《Oracle Exadata Survival Guide》 - Mary Mikell Spence; David Fitzjarrell




上一篇:hbase shell scan简单语法


下一篇:SQL零星技术点:SQL中转换money类型数值转换为字符串问题