ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle空間壓縮

oracle空間壓縮

原创 Linux操作系统 作者:benn_wpj 时间:2008-06-04 10:29:22 0 删除 编辑

作为DBA,空间的紧张是常遇到的一个问题,有时一个大的表就会占用几十GB及至上百GB的空间,存储历史数据的表常常都是这样,特别是数据仓库型应用(如经营分析应用)的数据库这样的问题就更加突出。如今,在计算机技术中数据压缩技术已经十分广泛和成熟了。在windows系统中有winrar、winzip,7-zip等等这样的软件,UNIX操作系统中相应的也有compress、gzip这样的压缩命令及软件。这些压缩工具的使用使我们节约了很多的空间,在ORACLE 9i之前的版本我有时在想,ORACLE什么时候也有类似的功能可以节约空间,提高单位空间的使用价值。期待之余,ORACLE从9i开始羞羞答答的引入表段级压缩;10g在部分压缩功能略有增强,例如DataPump源数据的压缩、Rman备份的压缩等,并无本质的改观;Oracle11g才大张旗鼓的推出相应Compression组件,支持全方面的压缩。本文将立足于ORACLE9/10g这样的实际应用最多的版本探讨一下ORACLE的压缩技术,并简单介绍一下ORACLE11g的压缩方面的新特征。

2数据段压缩实现原理
2.1原理简单描述
ORACLE的数据段压缩技术可以理解为“数据块”级压缩技术,也就是说是针对Block级别的数据压缩。它是在Block中引入记号表(symbol表),Block中的重复数据在symbol中用一个项(指针)表示,即块中相同的ROW只存储一条,从而节约了空间。

2.2压缩数据块的存储结构
2.2.1建一张包含28672行数据的表T_28672
SQL> show user

USER is "SCOTT"

SQL>

SQL> select count(*) from t_28672;

 

 COUNT(*)

----------

    28672
 

2.2.2T_ 28672压缩前与压缩后段统计
压缩前:

SQL> select owner,segment_name,file_id,block_id,blocks                

 2  from dba_extents

 3 where wner='SCOTT'          

 4   and segment_name='T_28672'

 5  order by block_id

 6 /

 

OWNER SEGMENT_NAME           FILE_ID  BLOCK_ID    BLOCKS

----- -------------------- ---------- ---------- ----------

SCOTT T_28672                      4      3729         8

SCOTT T_28672                      4      3737         8

SCOTT T_28672                      4      3745         8

SCOTT T_28672                      4      3753         8

SCOTT T_28672                      4      3761         8

SCOTT T_28672                      4      3769         8

SCOTT T_28672                      4      3777         8

SCOTT T_28672                      4      3785         8

SCOTT T_28672                      4      3793         8

SCOTT T_28672                      4      3801         8

SCOTT T_28672                      4      3809         8

SCOTT T_28672                      4      3817         8

SCOTT T_28672                      4      3825         8

SCOTT T_28672                      4      3833         8

SCOTT T_28672                      4      3841         8

SCOTT T_28672                      4      3849         8

SCOTT T_28672                      4      3977       128

 

17 rows selected.

 

SQL>
 

执行表压缩:

SQL> alter table T_28672 move COMPRESS;

 

Table altered.
 

压缩后:

SQL> select owner,segment_name,file_id,block_id,blocks

 2  from dba_extents

 3 where wner='SCOTT'

 4   and segment_name='T_28672'

 5 order by block_id

 6 /

 

OWNER SEGMENT_NAME           FILE_ID  BLOCK_ID    BLOCKS

----- -------------------- ---------- ---------- ----------

SCOTT T_28672                      4      3857         8

SCOTT T_28672                      4      3865         8

SCOTT T_28672                      4      3873         8

SCOTT T_28672                      4      3881         8

SCOTT T_28672                      4      3889         8

SCOTT T_28672                      4      3897         8

 

6 rows selected.

 

SQL>
 

简单总结:

从压缩前后段的数量上看,压缩还是相当节约空间的,17个区压缩成6个区,2倍的压缩比。

2.2.3dump出file 4 block 3860块
SQL> alter system dump datafile 4 block 3860;

System altered.
 

2.2.4结构分析
需要说明的是,如下的内容为完整.trc的节选,有关于block dump内容更详细的解释可以参照“DSI402e Data Types and Block Structures”,本文只关注与压缩有关的部分。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13790829/viewspace-331137/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: flashback初步
下一篇: sqlprompt
请登录后发表评论 登录
全部评论

注册时间:2008-04-26

  • 博文量
    57
  • 访问量
    137425