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.ppt为JulianDyke的文档(具体实现介绍见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:

表压缩的原理链接好像打不开?
to P.Linux:
链接是正常的,,只是被墙了..