Exadata Flash Cache Compression名不副实的特性

http://www.dbaleet.org/uncover_the_secret_of_exadata_flash_cache_compression/

Exadata X4的更新主要是集中在硬件层面的更新换代以及改进,相对硬件而言,软件层面的新特性乏善可陈,大多数集中在一些小细节的完善。

当然也有令人“眼前一亮”的新特性,比如Exadata Flash Cache Compression, 在Oracle的官方关于Exadata X4新特性介绍的ppt中,我们可以找到如下关于Exadata Flash Cache Compression的介绍:

有几个关键词看上去是“人见人爱,花见花开”:

1. 自动压缩/解压(automatic compressed/decompressed)

2. flashcache能存储多达2倍的数据(up to 2x more data)

3. 硬件级的压缩解压,零额外开销(implemented in hardware, zero performance overhead )

4. 支持Exadata X3和 Exadata X4 (supported on X3 and X4 storage servers)

官方没有提供更多的实现细节,但是告知如果需要使用这个特性,就需要在cell一段启用高级压缩的特性(Advanced Compression Option),

CellCLI> alter cell flashCacheCompress=TRUE

而高解压缩的特性是一个独立的组件,需要额外的license。

Oracle Advanced Compression Option must be licensed  to enable flash cache compression.

看到这里,根据一般人的理解,Exadata Smart Flash Cache Compression的工作原理应该是:

当有数据存入到Exadata Flash Cache的时候,数据会使用Oracle的高级压缩选项进行压缩,压缩是在硬件级完成的,所以这个过程非常快,近似的可以认为是零开销。同理,当数据库需要从Exadata Flash Cache中读取数据的时候,Exadata的F40/F80加速卡会自动将其解压,同样这个过程实在闪存卡的控制器这一端来完成的。整个压缩解压过程对于数据库而言是透明的,不需要进行人为干预。

看上去这种解释合情合理,但是仔细想想有几个问题实际上很让人感觉很诡异:

1. 如果压缩和解压是在硬件级别完成的,那么为什么还需要单独手工启用这个高级压缩的选项?
2. 如果压缩和解压是在硬件级别完成的,F40卡就可以使用了,那么这个版本到底更新了什么?
3. 如果压缩和解压使用的是Oracle的高级压缩选项,那么压缩的比例为什么最高达两倍的容量?

通过一番google以后,可以得到如下结论:

1. 目前确实存在硬件级别自动的压缩和解压的闪存卡,并且压缩和解压是在闪盘控制器这个层面来完成的;
2. 这种算法属于SandForce专利算法,SandForce后来被LSI公司收购,成为LSI公司的闪存部门,Oracle/Sun目前没有类似的专利;
3. 根据各项指标的匹配程度来看,Sun F40卡应该是LSI Nytro Warpdrive BLP4-400的OEM版,而F80卡则是LSI Nytro Warpdrive BLP4-800的OEM版本。

既然硬件硬件是OEM了LSI的闪存卡,压缩和解压使用的是SandForce的专利算法,那么压缩和解压使用Oracle Advanced Compression Option就是无稽之谈了。那么alter cell flashCacheCompress=TRUE到底打开了什么?可以肯定的这个开关一定不是启用了压缩解压功能。

那么它到底打开了什么功能?

在 MOS文档 1571789.1 中有如下一段话(当然现在已经被删掉了):

Flash cache compression dynamically increases the logical capacity of the flash cache by transparently compressing user data as it is loaded into the flash cache. This allows much more data to be kept in flash, and decreases the need to access data on disk drives. The I/Os to data in flash are orders of magnitude faster than the I/Os to data on disk. The compression and decompression operations are completely transparent to the application and database, and have no performance overhead whatsoever, even when running at rates of millions of I/Os per second. Please refer to and satisfy the additional database licensing requirements listed in the Exadata Licensing Guide before enabling this feature.

我们可以认为一块F80卡的容量为800GB,正常情况下,用户存储在F80卡中的数据都是通过闪存卡的主控进行压缩以后的结果,假如压缩的比例是2倍,这并不意味这你可以向这张F80卡中保存1.6TB的数据。理论上物理可寻址的空间为1.6TB,而默认情况下逻辑可寻址的空间只有800GB,所以保存的数据因为受到其逻辑可寻址限制最多也只能保存800GB,其余的物理空间即使是剩余的也是无法使用的。

因此alter cell flashCacheCompress=TRUE的作用实际上是解除了闪存卡逻辑寻址的限制。也就是说设置这个参数以后,原来逻辑不可寻址的另外一半物理空间现在变成可寻址了,此限制解除以后,最直接的影响是增加了闪存卡的可用空间,例如一块F80卡经压缩后保存的数据实际上能达到1.6TB。

所以,Exadata Smart Flash Cache Compression需要高级压缩组建(Oracle Advanced Compression Option)更多是一种商业上的策略,而非技术本身的因素,要知道ACO的license可不便宜,每个核心需要大约10k美刀,看来Larry Elison真是生财有道呀。

Comment

*

沪ICP备14014813号

沪公网安备 31010802001379号