Exadata上SQL如何处理HCC压缩表?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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压缩表?的主要内容,如果未能解决你的问题,请参考以下文章
通过 RODBC 通过 RStudio 运行 SQL 查询:如何处理哈希表?