oracle11g高级压缩

来源:互联网 发布:驾图世界数据大会 编辑:程序博客网 时间:2024/06/06 00:00

oracle11g高级压缩

oracle11g版本推出基于数据块级别高级压缩,以前版本的表级别压缩限制较多,更适合于数据直接加载的数据仓库,在OLTP环境下使用较少,既然名叫高级压缩,在功能上应该是有相当大的提升。

高级压缩特点:

1,建表时可以指定压缩参数,无需使用直接路径加载创建压缩表

2,支持DML操作,老版本的压缩不会压缩后续DML操作的数据

3,对现有的非压缩表可以设置压缩参数,后续数据会启用压缩,现有数据不会压缩

4,对DML操作影响很小,压缩操作只会在数据块接近饱和时运行

5,可以压缩rman备份,网络数据包,DG主库日志等

6,压缩效果明细,能节省GB级的存储空间,数据表各列重复数据较多的情况下,采用高级压缩效果更好

高级压缩使用

建表时默认不启用压缩选项,如果要使用高级压缩在建表语句后面加上compress for oltp
create table COMPTB_C(  owner          VARCHAR2(30),  object_name    VARCHAR2(128),  edition_name   VARCHAR2(30))compress for oltp;

对现有非压缩表启用高级压缩,现有数据不会压缩,只会压缩后续数据
alter table comptb_s compress for oltp

高级压缩示例

新建两个测试表,一个采用压缩,另一个不启用压缩
SQL> create table comtab compress for oltp  2  as select * from dba_objects  3  where 1=0;Table created.SQL> create table nocomtab as   2  select * from dba_objects  3  where 1=0;Table created.
插入测试数据
SQL> insert into comtab select * from dba_objects;72042 rows created.SQL> commit;Commit complete.SQL> insert into nocomtab select * from dba_objects;72042 rows created.
收集统计信息
SQL> begin  2  dbms_stats.gather_table_stats(  3  ownname => user,  4  tabname => 'COMTAB');  5  end;  6  /PL/SQL procedure successfully completed.SQL> begin  2  dbms_stats.gather_table_stats(  3  ownname => user,  4  tabname => 'NOCOMTAB');  5  end;  6  /PL/SQL procedure successfully completed.

查看user_tab_statistics视图
select table_name,num_rows,blocks from user_tab_statistics where table_name in('COMTAB','NOCOMTAB');
SQL> select table_name,num_rows,blocks from user_tab_statistics where table_name in('COMTAB','NOCOMTAB');TABLE_NAME NUM_ROWS     BLOCKS------------------------------ ---------- ----------COMTAB    72042 496NOCOMTAB    720421126



同样的数据量,高级压缩使用更少的数据块存储,在全表扫描时,高级压缩将提供更好的IO性能,在使用索引检索数据时,索引范围扫描和索引快速全扫描在高级压缩表上有更好的表现

全表扫描示例

SQL> set autotrace traceSQL> select * from comtab;71991 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 1463407995----------------------------------------------------------------------------| Id  | Operation  | Name   | Rows  | Bytes | Cost (%CPU)| Time   |----------------------------------------------------------------------------|   0 | SELECT STATEMENT  |   | 71991 |  6819K|95   (2)| 00:00:02 ||   1 |  TABLE ACCESS FULL| COMTAB | 71991 |  6819K|95   (2)| 00:00:02 |----------------------------------------------------------------------------Statistics----------------------------------------------------------  1  recursive calls  0  db block gets       5109  consistent gets  0  physical reads  0  redo size    3720394  bytes sent via SQL*Net to client      53313  bytes received via SQL*Net from client       4801  SQL*Net roundtrips to/from client  0  sorts (memory)  0  sorts (disk)      71991  rows processed
SQL> select * from nocomtab;71992 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 754113270------------------------------------------------------------------------------| Id  | Operation  | Name     | Rows  | Bytes | Cost (%CPU)| Time     |------------------------------------------------------------------------------|   0 | SELECT STATEMENT  |     | 71992 |6819K| 287   (1)| 00:00:04 ||   1 |  TABLE ACCESS FULL| NOCOMTAB | 71992 |6819K| 287   (1)| 00:00:04 |------------------------------------------------------------------------------Statistics----------------------------------------------------------  1  recursive calls  0  db block gets       5768  consistent gets  0  physical reads  0  redo size    8254868  bytes sent via SQL*Net to client      53313  bytes received via SQL*Net from client       4801  SQL*Net roundtrips to/from client  0  sorts (memory)  0  sorts (disk)      71992  rows processed

对比两个执行计划的一致性读,CPU耗费,执行时间,网络传输,高级压缩表在全表扫描上都具有一定的性能优势

两边的一致性读次数相差600左右,初看差别不是很大,但是最大的性能差距就是在这600个一致性读上面,剩余的那5000次是唬人的,具体分析后续会补上。

总之,11g的高级压缩功能比之前的版本确实好用了,已经不限于数据仓库,在常规的OLTP场景下也能取得很好的效果。

0 0
原创粉丝点击