免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1421 | 回复: 0
打印 上一主题 下一主题

使用compress压缩表 [复制链接]

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2016-05-27 06:20:00数据库技术版块每日发帖之星
日期:2016-06-04 06:20:00数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 01:17 |只看该作者 |倒序浏览
-- 创建表
  1. create table TB_CP_TEST
  2. (
  3.   ID NUMBER not null,
  4.   NAME1 CHAR(2000) default 'A',
  5.   NAME2 CHAR(2000) default 'A',
  6.   NAME3 CHAR(2000) default 'A',
  7.   NAME4 CHAR(2000) default 'A',
  8.   NAME5 CHAR(2000) default 'A',
  9.   NAME6 CHAR(2000) default 'A',
  10.   NAME7 CHAR(2000) default 'A'
  11. )
  12. ;

-- 写入数据

  1. Declare
  2. Begin
  3.   For i In 1 .. 10000 Loop
  4.     Insert Into Tb_Cp_Test (Id) Values (i);
  5.     Commit;
  6.   End Loop;
  7. End;
  8. /

-- 查看表占用空间大小

  1. Select a.BYTES
  2. From dba_segments a
  3. Where a.segment_name = 'TB_CP_TEST';

  4. BYTES
  5. ----------

  6.  251658240

-- 将表修改为可以压缩

  1. Alter Table TB_CP_TEST compress;

-- 压缩表

  1. alter table TB_CP_TEST move compress;

-- 查看表压缩后占用空间大小

压缩前后占用空间大小分别是251,658,240 150,994,944 可见压缩能节省不少空间,但表压缩后对表进行DML语句会消耗更多的io和cpu,同时表压缩后,索引会失效。

  1. Select a.BYTES
  2. From dba_segments a
  3. Where a.segment_name = 'TB_CP_TEST';

  4. BYTES
  5. ----------

  6. 150994944

11gR2以后的版本可以通过dbms_compression包来查看压缩后的比例.

  1. Create Table tb_compress_test
  2. As
  3. Select * From dba_objects;

  4. Alter Table tb_compress_test Move Compress;

  5. DECLARE
  6.     blkcnt_comp PLS_INTEGER;
  7.     blkcnt_uncm PLS_INTEGER;
  8.     row_comp PLS_INTEGER;
  9.     row_uncm PLS_INTEGER;
  10.     comp_ratio number;
  11.     comp_type VARCHAR2(30);
  12.   BEGIN
  13.      dbms_compression.get_compression_ratio(
  14.                                            scratchtbsname => 'TEST',
  15.                                            ownname => 'HXL',
  16.                                            tabname => 'TB_COMPRESS_TEST',
  17.                                            partname => NULL,
  18.                                            comptype => dbms_compression.comp_for_oltp,
  19.                                            blkcnt_cmp => blkcnt_comp,
  20.                                            blkcnt_uncmp => blkcnt_uncm,
  21.                                            row_cmp => row_comp,
  22.                                            row_uncmp => row_uncm,
  23.                                            cmp_ratio => comp_ratio,
  24.                                            comptype_str => comp_type);
  25.     dbms_output.put_line('Block Count Compressed: ' || TO_CHAR(blkcnt_comp));
  26.     dbms_output.put_line('Block Count UnCompressed: ' || TO_CHAR(blkcnt_uncm));
  27.     dbms_output.put_line('Row Count Compressed: ' || TO_CHAR(row_comp));
  28.     dbms_output.put_line('Row Count UnCompressed: ' || TO_CHAR(row_uncm));
  29.     dbms_output.put_line('Block Count Compressed: ' || TO_CHAR(comp_ratio));
  30.     dbms_output.put_line('Compression Type: ' || comp_type);
  31.  END;

  32. Block Count Compressed: 353
  33. Block Count UnCompressed: 1091
  34. Row Count Compressed: 216
  35. Row Count UnCompressed: 69
  36. Block Count Compressed: 3
  37. Compression Type: "Compress For OLTP"

 

 

 

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP