文章归档

segment compression的一点测试与说明

11g 的segment compression在内部存储上几乎没有变化..

对于新的compression for OLTP 新增了下面图中所示的相关处理, 也就是当block 达到一定的full程度的时候会触发一次compress动作,
将使用的空间降下来, 过一段时间, 由于dml操作的原因, block会再度达到指定的full 程度, 又会再一次触发compress动作.. 具体到什么时候
不会触发compress或者到什么程度触发compress我还不清楚..

图片来自Oracle的白皮书.(见附件, page 6).

关于Oracle9i–11g的compression 功能 ( 特别推荐 )
下面这两篇文章对Oracle Segment Compression介绍的非常深入, 有兴趣的同学可以深入看看.
http://www.laoxiong.net/dissect_compressed_block_part1.html
http://www.laoxiong.net/dissect_compressed_block_part.html

附件的DataSegmentCompression.pptJulianDyke的文档(具体实现介绍见page 32-36). (这一段介绍可以与上面老熊的文章部分吻合, 应该可以促进部分了解..)

另外还有部分关于row data/column data的相关介绍.. 可以参考DSI 402e Data Types and Block Structures(pages 96, 103-106)

另外还有几篇可参考文件
Oracle的sement compression白皮书(见附件)

冯春培最早在cnoug上发的帖子(在itpub也贴了),, 还有汪海对这个帖子的深度跟帖..
http://www.cnoug.org/viewthread.php?tid=3553

汪海早年关于这个问题的帖子.
http://wzwanghai.spaces.live.com/blog/cns!56626E237AFBD116!206.entry
http://www.orawh.com/78.html

eygle的介绍文章, 可看可不看, 深度理解看最上面的帖子, 使用介绍看杨保秋的blog.
http://www.eygle.com/archives/2006/06/oracle9ir2_nf_table_compress.html

黄玮 blog, 工作于OCCL 东方海外, 这篇介绍的也不错,,
http://www.hellodba.com/Doc/data_compress.htm

杨保秋的blog, 含有相关使用说明,介绍,场景使用
http://space.itpub.net/9134/viewspace-179724
http://space.itpub.net/?uid-9134-action-viewspace-itemid-179725
http://space.itpub.net/?uid-9134-action-viewspace-itemid-179730
http://space.itpub.net/?uid-9134-action-viewspace-itemid-179731
http://space.itpub.net/?uid-9134-action-viewspace-itemid-179737
http://space.itpub.net/?uid-9134-action-viewspace-itemid-179739
http://space.itpub.net/?uid-9134-action-viewspace-itemid-179744
http://space.itpub.net/?uid-9134-action-viewspace-itemid-179745

表压缩的原理
http://www.oratea.cn/2008/03/31/54.html
压缩表的原理(续1)
http://www.oratea.cn/2008/05/23/116.html
压缩表的原理(续2)
http://www.oratea.cn/2008/05/30/122.html

后面是我自己针对这个的一个测试结果.

test case 1

 

 

 

 

 

table_type

insert(s)

index create

select

update

segment size

compress for oltp

50.78

4.90

28.75

18.79

8388608

normal

50.29

3.71

33.93

16.86

10485760

 

 

 

 

 

 

test case 1

 

 

 

 

 

table_type

insert(s)

index create

select

update

segment size

compress for oltp

52.32

3.48

34.43

36.49

14680064

normal

51.43

5.47

53.06

46.59

20971520

附: 相关表结构说明.

SQL> select table_name,compression,compress_for from user_tables where table_name like 'JAMES_TT%';

TABLE_NAME                     COMPRESS COMPRESS_FOR
------------------------------ -------- ------------
JAMES_TT_C1                    ENABLED  OLTP
JAMES_TT_C2                    DISABLED

SQL> desc james_tt_c1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER
 OWNER                                              VARCHAR2(64)
 TYPE                                               VARCHAR2(64)
 VALUE                                              VARCHAR2(40)

SQL> desc james_tt_c2
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER
 OWNER                                              VARCHAR2(64)
 TYPE                                               VARCHAR2(64)
 VALUE                                              VARCHAR2(40)


下面为测试相关的代码与结果比较.

Test Case 1的测试结果
Test Case 2的测试结果
Test Case 1的测试过程
Test Case 2的测试过程

附2:

Oracle 11gR2 里面引入了一个新的package dbms_compression可以来估算一个表大概可以达到多大的压缩比率, 通过这个, 就可以只是使用compress for oltp是否值得了..

具体的测试用例可以参考下面的链接
Oracle11gR2 Table / Tablespace Compression
http://chandrapabba.blogspot.com/2009/09/oracle11gr2-table-tablespace.html

Related posts:

  1. delayed segment creation功能(11gr2新特性).

2 comments to segment compression的一点测试与说明

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>