February 2012
M T W T F S S
« Aug    
 12345
6789101112
13141516171819
20212223242526
272829  

Exadata V2 架构分析 (4)

Kaya 发表于 os2ora.com

下一个要出场的是HCC, Hybrid Columnar Compression. 目前它是Exadata上面才有的一个特性,所以又叫做Exadata Hybrid Columnar Compression。

Exadata V2 架构分析 (1)中,曾提到“在软件设计上,还有另一个重头戏,它更是大大的利用起了存贮节点上的CPU处理能力,同时还能减少对带宽的争用”。Exadata的很多设计,或许从根本上讲,就在于充分利用起存贮节点上的处理能力,Smart Scan和这里所要提及的HCC,就是两个典型的代表了。HCC中文翻译过来或许就叫做混合列压缩,它是在单纯的行存贮和列存贮之间取得的一个折衷。

一个比较好的参考文档是这篇白皮书Exadata Hybrid Columnar Compression.

image

上图中,典型地,4个8KB的blocks被当成一个Compression Unit。在这个CU所能存贮的rows中,每个column被分开存贮。可以想像到,每个column里的内容是很相似的,如果与row之间的内容做比较的话。于是,对每个column的内容进行压缩,会得到很好的压缩率。根据压缩算法的不同,Oracle提供了四种不同的压缩等级,详见上面提到的白皮书,这里就不详细列出了。

到底EHCC的压缩率可以达到多少呢?白皮书中提到两个数据,可以做为参考,对于Warehouse Compression,有10x的压缩率,对于Archive Compression,有15x的压缩率。

EHCC相对于单纯的Column Compression而言,有一个极其突出的优点,这点是不得不提及的。当进行行级访问数据时,如根据rowid返回一行数据,EHCC只要一个IO就够了,不管所访问的表有多少列,而对于单纯的Column Compression而言,对于每个Column,都必须有一个IO操作。那么,随着表设计的复杂,如一个表拥有成百上千列,两种存贮方式的性能就能体现出成百上千倍的差距了。

6 comments to Exadata V2 架构分析 (4)

  • neilkoo

    有个疑问哈:
    <>上面的那个CU是4个block,所有的列分布在4个块中,为什么说一行数据只需要1个IO?

  • 因为OS发出的一个IO可以不只8KB,呵呵

  • neilkoo

    那么这需要设置初始化参数吧
    另外,一个CU的大小是由什么来决定的?
    在这个CU内的各个block是否还可由pctfree这样的参数来控制?
    是否会发生行迁移?
    好多问题… 可否给点更详细点的介绍?

  • neilkoo

    CU的大小与参数有直接关系么?
    是我们先确定自己的CU大小 然后再手动调整初始化参数呢?
    还是db会自动根据初始化参数自动调整 CU的大小?

  • “OS发出的一个IO可以不只8KB”,这个跟初始化参数就没有什么关系了,没有哪个文档说一个IO一定只能读取一个db block啊。

    CU的大小内部是可变的,一个可能的决定因素比如说加载数据的特征。这完全由Oracle动态决定,没有参数可以手工指定。这里说的32k只是一个可能的情形而已。

    在EHCC中pctfree是失效的。也不会发生行迁移,但如果你更新一行记录,这行记录会以oltp的方式进行存贮。两种不同的存贮方式,概念也不同了。

  • hzhou

    在EHCC中pctfree是失效的。也不会发生行迁移,但如果你更新一行记录,这行记录会以oltp的方式进行存贮。

    请教:

    以我的理解,oltp的方式应该就是指原始的行存储方式吧?那如果更新了某个CU里面的一条记录的话你估计Exadata会怎么做呢?

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

您也可以使用微博账号登陆