压缩数据以进行直接路径加载

问题描述:
dss系统(decision support system)环境中包含许多加载一次,然后频繁扫描的表,采用压缩可以节省io,带来额外的cpu消耗

解决方案:
使用oracle基本压缩特性将直接路径加载的数据压缩
1、使用compress子句创建,修改或移动表时启用压缩
2、通过直接路径方式(create table ... as select或insert /*+ append */)加载数据

创建基本压缩的表
create table regs_dss compress as select * from regs;
可以使用compress或compress basic启用压缩,作用相同
select table_name,compression,compress_for from user_tables where table_name='REGS_DSS';

对于已经创建的表使用alter命令修改压缩属性
alter table regs_dss compress;
这不会影响现有的数据,只会对接下来采用直接路径加载的数据进行压缩,如果想对现有的数据压缩,使用
alter table regs_dss move compress;
move以后表上的索引会失效,需要重建

禁用压缩
alter table regs_dss nocompress;
同样不会对现有的数据解压缩,想要解压缩使用:
alter table regs_dss move nocompress;

工作原理:
基本压缩是适用于dss系统的压缩,对直接路径有效,对基本的dml无影响,也无效。如果系统中有额外的空闲cpu,但是io资源紧张,则可以使用压缩特性以cpu换io,压缩可以指定在表级别以及表空间级别
create tablespace comp_data datafile 'xxx' size 500m extent management local segment space management auto default compress;
也可以修改已有的表空间,设置默认压缩:
alter tablespace comp_data default compress;
select tablespace_name,def_tab_compression,compress_for from dba_tablespaces where tablespace_name='COMP_DATA';

压缩表中不能删除列,但可以将列标记为未使用

你可能感兴趣的:(oracle,11g性能优化攻略笔记)