Oracle 11g Advanced Compression.docx
- 文档编号:29724888
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:12
- 大小:18.26KB
Oracle 11g Advanced Compression.docx
《Oracle 11g Advanced Compression.docx》由会员分享,可在线阅读,更多相关《Oracle 11g Advanced Compression.docx(12页珍藏版)》请在冰豆网上搜索。
Oracle11gAdvancedCompression
Oracle11gAdvancedCompression
随着海量数据时代的到来,TB和EB级别的数据库已经出现在很多企业系统中。
相对几何级别增长的数据量,存储似乎是一个水涨船高不能填满的空洞。
数据表级别的压缩,是一定程度上缓解海量数据存储的一个解决方案。
在Oracle的产品发展历程中,数据表压缩compress技术,一直是一个不断提高和进化的方面。
在Oracle11g中,AdvancedCompression技术的推出,就是Oracle压缩技术成熟的重要标志。
1、OracleCompression压缩
简单的说,Oracle压缩采用的是“重复值消除”(EliminatingDuplicateValues)算法。
在数据库块级别,Oracle将压缩数据保存在数据块block中,解压数据使用的所有信息也都保存在各自的数据块内。
如果存在数据行或者数据列重复的情况,只在块头保存一次。
这些只保存一次的数据,称为“symboltableforthatblock”(该数据块的符号表)。
每个数据行如果使用这些符号表重复数据,只需要保存一个符号表记录的“shortreference”。
在Compression类型上,Oracle根据数据表的操作类型,提供两种类型的压缩:
üCompressfordirect_loadoperation:
直接路径压缩,也是默认的压缩方式。
该选项适合于Datawarehouse类型系统,该类型系统没有很频繁的DML操作,数据加载方式也大都是使用批量加载;
üCompressforalloperation:
是AdvancedCompression的一个特点。
通常的压缩技术对于DML操作的影响是巨大的。
AdvancedCompression的这个选择类型,就是为OLTP系统准备。
该选项为所有的DML操作开启了压缩功能;
2、AdvancedCompression适应范围
Oracle11g的AdvacedCompression组件适应范围较广,几乎涉及到所有空间存储对象。
üOLTP数据表压缩
Oracle最早从9i版本中,提供了压缩compression功能。
早期的compression允许数据表在进行批量加载操作(bulkloadoperation)是对数据进行压缩,比如directpathload(sqlloader)、createtableasselect…操作(CTAS)。
这种方式适应数据仓库(Datawarehouse)类型系统。
AdvancedCompression技术组件提供了对各种类型操作进行压缩的技术,包括了常规的DMLinsert和update操作。
具体包括下列操作:
1)直接路径加载,如sqlloader;
2)Createtablexxxasselectxx操作(CTAS);
3)并行parallel(或者串行使用append提示的插入)语句;
4)单行或者多行插入;
5)单行或者多行更新;
在使用一些数据管理语句,如move操作的时候,在执行阶段就会对数据表加以exclusive级别数据锁,禁止进行DML操作。
操作结束时,数据表还是能够保证压缩状态。
对压缩数据表,进行DML操作的性能损耗可以做到最小。
这也是AdvancedCompression最大特色。
üSecureFile压缩和消重复(CompressionandDeDuplication)
SecureFileDeduplication是用于消除重复SecurFile数据的智能化技术。
Oracle可以将重复的多份SecureFile数据只保存一份,其他保存都是对该文件的一个镜像引用。
这样做就可以大大减少空间占用。
üDataDump数据泵压缩
数据泵datadump是Oracle10g推出的替代原来imp/exp工具的高性能数据备份还原工具。
使用数据泵将数据export导出的时候,datadumpcomprssion就将数据表压缩后存储在DMP文件中。
在导入的时候,数据泵会自动将压缩的表数据进行解压。
üRMAN压缩
RMAN是Oracle主推的备份还原工具在写入磁盘disk或者磁带tape之前,就已经是压缩过的备份数据。
在进行还原操作的时候,是不要进行显示的解压工作。
这样对于保存的完全、增量备份集合set来说,是非常好的优质特性。
üDataGuardNetworkCompress
DataGuard是OracleHA(HighAvailability)的重要组成部分。
PrimaryDatabase和StandbyDatabase之间,通过网络建立实时连接。
PrimaryDatabase的任何数据变化,都会以redolog的方式持续传入到standbydatabase上,进行apply应用过程。
最终实现一致性。
使用OracleAdvancedCompression技术,可以对网路中传输的redodata进行压缩,从而减少redogap。
最终让standbydatabase可以更快的进行同步,实现HA目标。
最后特别说一下关于AdvancedCompressionlisence问题,在11g之前使用Compress是不需要单独的许可费用的。
从11g开始,AdvancedCompression需要单独许可使用,额外进行收费。
下面我们通过一系列实验来演示tablecompression的使用。
3、实验环境准备
首先我们准备实验环境,构建一个相对较大的数据表。
SQL>select*fromv$version;
BANNER
--------------------------------------------------------------------------------
OracleDatabase11gEnterpriseEditionRelease11.2.0.1.0-Production
PL/SQLRelease11.2.0.1.0-Production
CORE11.2.0.1.0Production
TNSforLinux:
Version11.2.0.1.0-Production
NLSRTLVersion11.2.0.1.0–Production
SQL>select*fromv$optionwhereparameter='AdvancedCompression';
PARAMETERVALUE
------------------------------------------------------------------------------------
AdvancedCompressionTRUE
构建数据表t_ori,其中包括21万余条数据。
SQL>createtablet_oriasselect*fromdba_objects;
Tablecreated
SQL>selectcount(*)fromt_ori;
COUNT(*)
----------
217731
SQL>execdbms_stats.gather_table_stats(user,'T_ORI',cascade=>true);
PL/SQLproceduresuccessfullycompleted
从数据字典中,我们可以清晰的看到数据表空间分配。
SQL>selectsegment_name,count(*)extents,sum(blocks)blocks,sum(bytes)/1024/1024MBsfromdba_extentswherewner='SYS'andsegment_name='T_ORI'groupbysegment_name;
SEGMENT_NAMEEXTENTSBLOCKSMBS
--------------------------------------------------
T_ORI40320025
SQL>SELECTtable_name,compression,compress_forFROMdba_tableswheretable_name='T_ORI';
TABLE_NAMECOMPRESSIONCOMPRESS_FOR
-----------------------------------------------------
T_ORIDISABLED
4、CompressForDirect_LoadOperation
首先我们使用compress常规选项。
SQL>createtablet_compresscompressasselect*fromt_oriwhere1=0;
Tablecreated
SQL>SELECTtable_name,compression,compress_forFROMdba_tableswheretable_namein('T_ORI','T_COMPRESS');
TABLE_NAMECOMPRESSIONCOMPRESS_FOR
-----------------------------------------------------
T_ORIDISABLED
T_COMPRESSENABLEDBASIC
在创建数据表时,使用compress子句,就可以创建出具有压缩功能的数据表。
从数据字典看,T_COMPRESS开启了压缩功能,是Basic类型。
Compress对应的就是compressfordirect_loadoperations压缩类型。
使用传统的压缩方式,适合datawarehouse类型。
SQL>createtablet_compdircompressfordirect_loadoperationsasselect*fromt_ori;
Tablecreated
Executedin0.829seconds
SQL>SELECTtable_name,compression,compress_forFROMdba_tableswheretable_namein('T_ORI','T_COMPRESS','T_COMPDIR');
TABLE_NAMECOMPRESSIONCOMPRESS_FOR
-----------------------------------------------------
T_COMPDIRENABLEDBASIC
T_ORIDISABLED
T_COMPRESSENABLEDBASIC
如果对数据表使用append方式添加数据,是使用directload加载数据。
SQL>insert/*+append*/intot_compressselect*fromt_ori;
217731rowsinserted
Executedin0.563seconds
SQL>commit;
Commitcomplete
Executedin0seconds
SQL>selectsegment_name,count(*)extents,sum(blocks)blocks,sum(bytes)/1024/1024MBsfromdba_extentswherewner='SYS'andsegment_namein('T_ORI','T_COMPRESS','T_COMPDIR')groupbysegment_name;
SEGMENT_NAMEEXTENTSBLOCKSMBS
--------------------------------------------------
T_COMPDIR228967
T_COMPRESS37281622
T_ORI40320025
Executedin0.078seconds
上面实验,我们可以对比出在进行不同操作时advancedcompression的特性。
对于compressfordirect_loadoperations操作,使用CTAS操作的压缩率较高。
原数据表大小为25M,使用CTAS操作生成的数据表T_COMPDIR大小只有7M,压缩率仅三分之二。
但是,如果使用append提示进行插入操作,虽然也会有压缩效果,但是压缩效果远不如CTAS,压缩后的数据表为22M。
下面如果使用一般的分条insert,压缩效果如何呢?
SQL>truncatetablet_compress;
Tabletruncated
SQL>declare
2typet_lististableoft_ori%rowtypeindexbybinary_integer;
3iinteger;
4
5t_infost_list;
6begin
7select*
8bulkcollectintot_infos
9fromt_ori;
10
11foriin1..t_infos.countloop
12insertintoT_COMPRESSvaluest_infos(i);
13
14if(mod(i,1000)=0)then
15commit;
16endif;
17endloop;
18
19commit;
20end;
21/
PL/SQLproceduresuccessfullycompleted
Executedin18.703seconds
SQL>selectsegment_name,count(*)extents,sum(blocks)blocks,sum(bytes)/1024/1024MBsfromdba_extentswherewner='SYS'andsegment_namein('T_ORI','T_COMPRESS','T_COMPDIR')groupbysegment_name;
SEGMENT_NAMEEXTENTSBLOCKSMBS
--------------------------------------------------
T_COMPDIR228967
T_COMPRESS37281622
T_ORI40320025
Executedin0.062seconds
从现象上看,使用append数据表时和普通insert数据表在T_COMPRESS的时候空间差异不大。
下面我们来实验使用compressfordirect_loadoperations的时候,对其他操作影响。
SQL>altersystemflushbuffer_cache;
Systemaltered
SQL>selectcount(*)fromt_compress;
COUNT(*)
----------
217731
Executedin0.094seconds
SQL>selectcount(*)fromt_compdir;
COUNT(*)
----------
217731
Executedin0.063seconds
SQL>selectcount(*)fromt_ori;
COUNT(*)
----------
217731
Executedin0.031seconds
从查询时间看,普通compress虽然可以大幅度减少空间使用,但是对其他操作的影响是存在的。
5、CompressForAllOperation
CompressForAllOperation选项是AdvancedCompression的重要进步,提供了OLTP类型的压缩操作。
SQL>createtablet_compallcompressforalloperationsasselect*fromt_oriwhere1=0;
Tablecreated
Executedin0.157seconds
SQL>createtablet_compall2compressforalloperationsasselect*fromt_ori;
Tablecreated
Executedin0.797seconds
使用Compressforalloperations子句就可以建立压缩数据表。
SQL>insert/*+append*/intot_compallselect*fromt_ori;
217731rowsinserted
Executedin0.797seconds
SQL>commit;
Commitcomplete
Executedin0seconds
SQL>selectsegment_name,count(*)extents,sum(blocks)blocks,sum(bytes)/1024/1024MBsfromdba_extentswherewner='SYS'andsegment_namein('T_ORI','T_COMPALL','T_COMPALL2')groupbysegment_name;
SEGMENT_NAMEEXTENTSBLOCKSMBS
--------------------------------------------------
T_COMPALL22310248
T_COMPALL40320025
T_ORI40320025
Executedin0.797seconds
同compressfordirect_loadoperations现象基本类似。
Append方式插入表现出一般的压缩比例。
SQL>truncatetablet_compall;
Tabletruncated
Executedin0.047seconds
SQL>declare
2typet_lististableoft_ori%rowtypeindexbybinary_integer;
3iinteger;
4
5t_infost_list;
6begin
7select*
8bulkcollectintot_infos
9fromt_ori;
10
11foriin1..t_infos.countloop
12insertintot_compallvaluest_infos(i);
13
14if(mod(i,1000)=0)then
15commit;
16endif;
17endloop;
18
19commit;
20end;
21/
PL/SQLproceduresuccessfullycompleted
Executedin17.687seconds
SQL>selectsegment_name,count(*)extents,sum(blocks)blocks,sum(bytes)/1024/1024MBsfromdba_extentswherewner='SYS'andsegment_namein('T_ORI','T_COMPALL','T_COMPALL2')groupbysegment_name;
SEGMENT_NAMEEXTENTSBLOCKSMBS
--------------------------------------------------
T_COMPALL22310248
T_COMPALL40320025
T_ORI40320025
Executedin0.313seconds
6、结论
Oracle11g推出的AdvancedCompression特性是Oracle在数据压缩方面的一个重要里程碑。
它突出表现在两个方面的优势:
其一是对OLTP系统各类型复杂操作的高效压缩上,另一方面是体现在对RMAN、DataPump和Dataguard等多范围压缩支持上。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 11g Advanced Compression 11