某银行客户关于oracle 11g表压缩生效测试—table compress

某银行客户问题

    某银行**客户今天给我电话,询问11g压缩相关问题。
他们的问题是对于BASIC压缩方式,使用APPEND方式插入数据,发现并未进行压缩。
而如果采用MOVE的方式,压缩是生效的。
客户需要我方分析及查阅一下压缩方面的文档,我不太确认APPEND对于BASIC压缩是否生效。
此外检查一下MOS上是否存在相关bug

测试结论

1,可以用create table compress或alter table compress启用表压缩
2,表压缩有诸多限制条件,见下文
3,如果未启用表压缩,可以用ALTER TABLE MOVE COMPRESS启用表压缩,同时会对未压缩的空间进行压缩
4,表压缩有4-5种压缩模式,本文仅测试了COMPRESS BASIC,这是最基本的一种压缩,其它将在下面的文章中测试
5,在本地库把相关表的数据经过DB LINK插入到远端库压缩表,其远端库的压缩表不会真正启用压缩(相关文章可在MOS中查阅关键字:table compress)

完成此任务需要你具备的技能

  1,懂得如何查阅官方文档
  2,科学阅读关于表压缩命令的相关选项及内在含义
  3,构建有效的用例进行测试,加深对于表压缩相关知识的掌握
  4,进阶到一定程度,要会在多种压缩模式,作出决择,适用其业务场景
  5,查阅MOS定位相关数据库版本,关于表空间一系列BUG或者注意事项

测试过程


1,数据库版本
SQL> select * from v$version where rownum=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

SQL>

2,建表
SQL> create table t_comp(a varchar2(10),b int);

Table created.

3,查阅user_tables与压缩相关的列含义
COMPRESSION
VARCHAR2(8)   Indicates whether table compression is enabled (ENABLED) or not (DISABLED); NULL for partitioned tables
COMPRESS_FOR VARCHAR2(12)   Default compression for what kind of operations:
  • BASIC

  • OLTP

  • QUERY LOWFoot 1 

  • QUERY HIGHFootref 1

  • ARCHIVE LOWFootref 1

  • ARCHIVE HIGHFootref 1

  • NULL


4,查询上述测试是否压缩,可见未启压缩
SQL> select table_name,blocks,compression,compress_for from user_tables where lower(table_name)='&table_name';
Enter value for table_name: t_comp
old 1: select table_name,blocks,compression,compress_for from user_tables where lower(table_name)='&table_name'
new 1: select table_name,blocks,compression,compress_for from user_tables where lower(table_name)='t_comp'

TABLE_NAME BLOCKS COMPRESS COMPRESS_FOR
------------------------------ ---------- -------- ------------
T_COMP DISABLED

5,启用压缩功能,如下为11.2.0.1与压缩相关的选项(create table)及相关官方手册


由上可知仅在直接路径读模式下生效(关于直接路径读相关概念,我会在相关文章中讲解,或者大家可以参阅相关官方手册)

table_compression

The table_compression clause is valid only for heap-organized tables. Use this clause to instruct the database whether to compress data segments to reduce disk use. The COMPRESS keyword enables table compression. The NOCOMPRESS keyword disables table compression. NOCOMPRESS is the default.

  • When you enable table compression by specifying either COMPRESS or COMPRESS BASIC, you enable basic table compression. Oracle Database attempts to compress data during direct-path INSERT operations when it is productive to do so. The original import utility (imp) does not support direct-path INSERT, and therefore cannot import data in a compressed format.

    Tables with COMPRESS or COMPRESS BASIC use a PCTFREE value of 0 to maximize compression, unless you explicitly set a value for PCTFREE in the physical_attributes_clause.

    In earlier releases, this type of compression was called DSS table compression and was enabled using COMPRESS FOR DIRECT_LOAD OPERATIONS. This syntax has been deprecated.


See Also:

"Conventional and Direct-Path INSERT"  for information on direct-path INSERT  operations, including restrictions

6,回复给客户的内容

       基于压缩表问题,经在11.2.0.1测试,结论如下:


      1,正常情况下,采用insert /*+ append */ into t_test select * from 进行插入记录,表压缩是生效的


      2,如果表以未压缩方式创建,可以采用alter table move compress变更为压缩表方式,此时数据库会压缩处理原有表记录

         且表会变更为压缩表


      3,经查MOS,发现文章

         Basic Compression Is Not Applied When Inserting Into Remote Table (文档 ID 1390050.1)

         大致意思为:insert /*+ append */ t_test@db_link select * from,远端库的压缩表t_test其压缩不会生效

   
          MOS给出的解决方案有2个:
               a,启用OLTP压缩,命令:alter table t_test compress for oltp;
               b,对调SQL语句,即从远端库发起上述SQL,表压缩即可生效

      4,关于压缩表相关操作限制条件:


  • 不支持255个列以上表压缩
  • 不支持对于LOB列的表压缩
  • 如使用COMPESS BASIC模式,不用删除列,但却可以配置此列为不可用
  • 不支持IOT表的表压缩
  • 不支持外部表或集表的表压缩
  • 不支持启用了闪回归档功能的表压缩
  • 不支持含有LONG列的表压缩


相关阅读

   
  create table官方语义


个人简介

8年oracle从业经验,具备丰富的oracle技能,目前在国内北京某专业oracle服务公司从事高级技术顾问。
服务过的客户:
中国电信
中国移动
中国联通
中国电通
国家电网
四川达州商业银行
湖南老百姓大药房
山西省公安厅
中国邮政
北京302医院     
河北廊坊新奥集团公司

 项目经验:
中国电信3G项目AAA系统数据库部署及优化
      中国联通4G数据库性能分析与优化
中国联通CRM数据库性能优化
中国移动10086电商平台数据库部署及优化
湖南老百姓大药房ERR数据库sql优化项目
四川达州商业银行TCBS核心业务系统数据库模型设计和RAC部署及优化
四川达州商业银行TCBS核心业务系统后端批处理存储过程功能模块编写及优化
北京高铁信号监控系统RAC数据库部署及优化
河南宇通客车数据库性能优化
中国电信电商平台核心采购模块表模型设计及优化
中国邮政储蓄系统数据库性能优化及sql优化
北京302医院数据库迁移实施
河北廊坊新奥data guard部署及优化
山西公安厅身份证审计数据库系统故障评估
国家电网上海灾备项目4 node rac+adg 
       贵州移动crm及客服数据库性能优化项目
       贵州移动crm及客服务数据库sql审核项目
       深圳穆迪软件有限公司数据库性能优化项目

联系方式:
手机:18201115468
qq   :   305076427
qq微博: wisdomone1
新浪微博:wisdomone9
qq群:275813900    
itpub博客名称:wisdomone1     http://blog.itpub.net/9240380/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-1726705/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-1726705/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值