DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1060|回复: 0
打印 上一主题 下一主题

[待整理] Oracle的数据段压缩技术

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-13 13:55:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1、引言
  作为DBA,空间的紧张是常遇到的一个问题,有时一个大的表就会占用几十GB及至上百GB的空间,存储历史数据的表常常都是这样,特别是数据仓库型应用(如经营分析应用)的数据库这样的问题就更加突出。如今,在计算机技术中数据压缩技术已经十分广泛和成熟了。在windows系统中有winrar、winzip,7-zip等等这样的软件,UNIX操作系统中相应的也有compress、gzip这样的压缩命令及软件。这些压缩工具的使用使我们节约了很多的空间,在ORACLE 9i之前的版本我有时在想,ORACLE什么时候也有类似的功能可以节约空间,提高单位空间的使用价值。期待之余,ORACLE从9i开始羞羞答答的引入表段级压缩;10g在部分压缩功能略有增强,例如DataPump源数据的压缩、Rman备份的压缩等,并无本质的改观;Oracle11g才大张旗鼓的推出相应Compression组件,支持全方面的压缩。本文将立足于ORACLE9/10g这样的实际应用最多的版本探讨一下ORACLE的压缩技术,并简单介绍一下ORACLE 11g的压缩方面的新特征。
  2、数据段压缩实现原理
  2.1 原理简单描述
  ORACLE的数据段压缩技术可以理解为“数据块”级压缩技术,也就是说是针对Block级别的数据压缩。它是在Block中引入记号表(symbol表),Block中的重复数据在symbol中用一个项(指针)表示,即块中相同的ROW只存储一条,从而节约了空间。
  2.2 压缩数据块的存储结构
  2.2.1 建一张包含28672行数据的表T_ 28672
           
  1. SQL> show userUSER is "SCOTT"SQL>SQL> select count(*) from t_28672; COUNT(*)----------28672
复制代码
           

  2.2.2 T_ 28672压缩前与压缩后段统计
  压缩前:
           
  1. SQL> select owner,segment_name,file_id,block_id,blocks                 2  from dba_extents3 where wner='SCOTT'           4   and segment_name='T_28672'5  order by block_id6 / OWNER SEGMENT_NAME           FILE_ID  BLOCK_ID    BLOCKS----- -------------------- ---------- ---------- ----------SCOTT T_28672                      4      3729         8SCOTT T_28672                      4      3737         8SCOTT T_28672                      4      3745         8SCOTT T_28672                      4      3753         8SCOTT T_28672                      4      3761         8SCOTT T_28672                      4      3769         8SCOTT T_28672                      4      3777         8SCOTT T_28672                      4      3785         8SCOTT T_28672                      4      3793         8SCOTT T_28672                      4      3801         8SCOTT T_28672                      4      3809         8SCOTT T_28672                      4      3817         8SCOTT T_28672                      4      3825         8SCOTT T_28672                      4      3833         8SCOTT T_28672                      4      3841         8SCOTT T_28672                      4      3849         8SCOTT T_28672                      4      3977       128 17 rows selected. SQL>执行表压缩:SQL> alter table T_28672 move COMPRESS;Table altered.
复制代码
           

  压缩后:
           
  1. SQL> select owner,segment_name,file_id,block_id,blocks2  from dba_extents3 where wner='SCOTT' 4   and segment_name='T_28672'5 order by block_id6 / OWNER SEGMENT_NAME           FILE_ID  BLOCK_ID    BLOCKS----- -------------------- ---------- ---------- ----------SCOTT T_28672                      4      3857         8SCOTT T_28672                      4      3865         8SCOTT T_28672                      4      3873         8SCOTT T_28672                      4      3881         8SCOTT T_28672                      4      3889         8SCOTT T_28672                      4      3897         8 6 rows selected.SQL>
复制代码
           

  简单总结:
  从压缩前后段的数量上看,压缩还是相当节约空间的,17个区压缩成6个区,2倍的压缩比。
  2.2.3 dump出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”,本文只关注与压缩有关的部分。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-1-11 21:06 , 耗时 0.079035 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表