文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么理解Oracle表压缩

2024-04-02 19:55

关注

本篇内容介绍了“怎么理解Oracle表压缩”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1、官方文档说法: 

As your database grows in size, consider using table compression. Compression saves disk space, reduces memory use in the database buffer cache, and can significantly speed query execution during reads. Compression has a cost in CPU overhead for data loading and DML. However, this cost might be offset by reduced I/O requirements

随着数据库不断增长,可以考虑使用表压缩。压缩可以节省磁盘空间,减少数据库buffer cache内存使用,并且可以加速查询。 

压缩对于数据装载和DML操作有一定的CPU消耗。然而,这些消耗可以为I/O的减少而抵消。

表的压缩对于应用程序来说是完全透明的,对于决策支持系统(DSS)、联机事务处理系统(OLTP)、归档系统(Archive Systems)来说表的压缩是有益处的。

我们可以压缩表空间,表和分区。如果压缩表空间,那么在默认的情况下,表空间上创建的所有表都将被压缩。只有在表执行插入、更新或批量数据载入时,才会执行数据的压缩操作。

一、表压缩的方法

Oracle提供了一下四种类型的表压缩方法:

1、Basic Compression:压缩等级High,CPU开销较小

2、OLTP Compression:压缩等级High,CPU开销较小

3、Warehouse Compression:压缩等级Higher,CPU开销较大(取决于压缩参数是Low还是High)

4、Archive Compression:压缩等级Highest,CPU开销很大(取决于压缩参数是Low还是High)

当使用Basic Compression,warehouse Compression,Archive Compression类型的压缩时,尽在发生批量数据导入时才会执行压缩。

OLTP Compression被用于联机事务处理系统,可以对任意的SQL操作执行数据压缩。

Warehouse Compression和Archive Compression可以获得很高的压缩等级,因为它们采用了Hybrid Columnar(混合列)压缩技术,Hybrid Columnar采用一种改良的列的存储形式替代一行为主的存储形式。Hybird Columnar技术允许将相同的数据存储在一起,提高了压缩算法的效率。当使用混合列压缩算法时,将导致更多的CPU开销,因此这种压缩技术适用于更新不频繁的数据。

二、基本压缩特点: 

1)使用基本压缩,只有当数据是直接路径插入或更新记录(direct-path insert and updated )时才会发生压缩。 

并且支持有线的数据类型和SQL操作。

二、如何启用基本压缩? 

1)通过create table语句中指定compress条件。 

2)通过alter table .. compress; 来给现有表启用压缩; 

3)通过alter table .. nocompress; 来禁用表压缩

三、在压缩表上添加和删除列

在压缩表上添加和删除列有如下限制:

1、对于compression basic类型的压缩,不能对新添加的列指定默认值

--测试过程:

TEST@ r7>select * from empd1;
no rows selected
TEST@ r7>select table_name,compression,compress_for from user_tables where table_name='EMPD1';
TABLE_NAME                     COMPRESS COMPRESS_FOR
------------------------------ -------- ------------
EMPD1                          DISABLED
TEST@ r7>INSERT INTO EMPD1 SELECT * FROM SCOTT.EMP WHERE ROWNUM<10;
9 rows created.
TEST@ r7>COMMIT;
Commit complete.
TEST@ r7>alter table empd1 compress basic;
Table altered.
TEST@ r7>select table_name,compression,compress_for from user_tables;
TABLE_NAME                     COMPRESS COMPRESS_FOR
------------------------------ -------- ------------
TBUSINFLAG                     ENABLED  OLTP
TCOMBI                         ENABLED  OLTP
TCURRENTS                      ENABLED  OLTP
TENTRUSTDIRECTION              ENABLED  OLTP
TINSTRUCTION                   ENABLED  OLTP
TINSTRUCTIONSTOCK              ENABLED  OLTP
TOPERATOR                      ENABLED  OLTP
TOUTCONFIRM                    ENABLED  OLTP
TREALDEAL                      ENABLED  OLTP
TSTOCKINFO                     ENABLED  OLTP
TUNITSTOCK                     ENABLED  OLTP
CUSTOMERS                      ENABLED  OLTP
SYS_EXPORT_FULL_01             ENABLED  OLTP
A                              ENABLED  OLTP
B                              ENABLED  OLTP
EMPD1                          ENABLED  BASIC
16 rows selected.
TEST@ r7>desc empd1;
 Name                    Null?    Type
 ----------------- -------- -------------
 EMPNO                      NUMBER(4)
 ENAME                      VARCHAR2(10)
 JOB                        VARCHAR2(9)
 MGR                        NUMBER(4)
 HIREDATE                   DATE
 SAL                        NUMBER(7,2)
 COMM                       NUMBER(7,2)
 DEPTNO                     NUMBER(2)
--添加有默认值的字段:不支持
TEST@ r7>alter table empd1 add (test varchar(10) default 'sysdate');
alter table empd1 add (test varchar(10) default 'sysdate')
                       *
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables
--添加没有默认值得字段:支持
TEST@ r7>alter table empd1 add (test varchar(10));
Table altered.
--对于compression basic类型的压缩,不支持列的删除操作
TEST@ r7>alter table empd1 drop column test;
alter table empd1 drop column test
                              *
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables

2、对于OLTP类型的压缩,如果为新添加的列指定默认值,则该列必须被设置为 NOT NULL,为可以为空的列添加默认值不被支持。

对于这一点,做个测试。对于OLTP类型的压缩,该列为空也可以被添加。

TEST@ r7>alter table empd1 add (test1 varchar(10) default 'sysdate');
Table altered.

对于OLTP类型的压缩,能够支持列的删除操作,但是在数据库内部将列标记为unused状态,避免长时间的解压和重新压缩的操作。

TEST@ r7>alter table empd1 drop column test;
Table altered.
SQL> ALTER TABLE EMPD1 DROP UNUSED COLUMNS;     --删除unused字段

“怎么理解Oracle表压缩”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯