Oracle表的压缩特性

      从Oracle 9i 开始,Oracle 数据库就提供一种表的数据压缩特性。它可以显著地减少磁盘空间占用,并且在表的数据查询时也会减少该表内存读的量,该机制也会提升查询性能。

 

这种特性通常在数据仓库类应用中广泛使用。

 

(miki 西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1600337 )

 

1 、表的压缩原理

Oracle 的压缩特性是在一个数据块中通过消除相同值而实现。一个数据块中任何重复出现的值会被同一个块中 symbol  table ” 的一个“symbol 向量 代替。例如,在一个数据块中某行中一个列的值为“welcome stanford ” ,还有4 行中此列的值也是“welcome stanford ” ,在压缩以后,它该值只会存储一次,剩下的四次都会被一个“symbol 向量 代替。“symbol  向量 的字节数会远远比原来的值要小很多。

 

2 、表的压缩语法

alter table  TABLE_MIKIXIYOU  move compress;

这里压缩的表为TABLE_MIKIXIYOU

 

3 、表的压缩测试

首先记录下将要压缩的表的体积,为1408MB

SQL> select segment_name,(bytes/1024/1024) as mbb from user_segments_1 t where t.segment_name='CMS_DOC_SINGLE_ATTR';

 SEGMENT_NAME             MBB

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

TABLE_MIKIXIYOU      1408

然后,执行压缩操作,注意压缩期间该表不能写。

alter table TABLE_MIKIXIYOUmove compress;

在压缩过程中会以TM 6 级锁表。

最后,压缩结束得到压缩结果为920MB

SQL> select segment_name,(bytes/1024/1024) as mbb from user_segments_1 t where t.segment_name='CMS_DOC_SINGLE_ATTR';

 SEGMENT_NAME             MBB

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

TABLE_MIKIXIYOU      920

从结果看,压缩比率为65% ,是可以节省一定的空间的。

 

4 、总结

压缩特性在数据仓库环境中可以最优使用,尤其是对事实表而言。因为压缩在一个数据块中进行的,所以数据块的大小越大越好,数据仓库上数据块的设置通常也是比较大的。它还能提升查询性能,因为在同样记录数下数据块数变小了。

当然,压缩特性也可以应用在OLTP 应用类数据库上。但如果并发写入多的话,可能会出现严重的等待。

 

 

猜你喜欢

转载自mikixiyou.iteye.com/blog/1600337
今日推荐