Exadata上SQL如何处理HCC压缩表?

上周有客户这样理解HCC压缩:为了降低存储到数据库的带宽占用,所以存储将HCC压缩过的所有数据传输到数据节点在进行解压缩,并且当采用了HCC压缩,则Exadata的智能扫描则无法使用,全部数据都需要在数据节点进行处理,全部消耗数据库节点的CPU?

但实际的上的原理并非如此,而是存储节点依然需要消耗CPU进行解压缩,并同时使用智能扫描和存储索引,具体处理过程如下

1. Exadata存储一次读取1MB的存储空间(通常HCC压缩单元是32K或64K,相当于一次读取32个或16个CU即压缩单元),在这个阶段可以使用存储索引进行过滤

2. Exadata存储将CU缓存

3. Exadata智能扫描来处理CU

a) 解压缩SQL查询where条件相关的一个字段,筛选该字段中符合条件的值,如果没有符合条件的则抛弃该CU,如果有则继续解压其余where条件相关字段,重复上述过程直至所有查询where条件字段处理完毕,获取到所有符合条件值(一次处理一个字段)

b)根据查询条件值,解压并过滤SQL需要的输出需要的字段

c)将符合条件的输出字段和where条件的字段重新打包压缩成CU返回给数据库节点

4. 数据库节点解压缩接受到的CU,继续进行处理,再返回最终结果给客户端

由上面的过程可以,Exadata平台在存储端和数据库端均需要进行解压缩工作,都需要消耗相应的CPU。

你可能感兴趣的:(Exadata上SQL如何处理HCC压缩表?)