【Table Compression】OLTP压缩(OLTP Compression)

文章目录


##OLTP压缩概述

OLTP压缩(OLTP Compression)功能是从Oracle 11g版本开始推出的一种高级行压缩技术。通过OLTP压缩功能,可以在普通的DML操作过程中也可以对数据进行压缩,提高系统的性能。

##OLTP压缩的设置方法
可以通过指定COMPRESS属性来使用压缩功能。
OLTP压缩(OLTP Compression)属性的设定语法,在Oracle的各个版本上略有不同,但向后兼容,并且12.1的版本上也可以使用11.1和11.2版本的语法,具体语法如下:

11.1版本上:
CREATE TABLE <table_name> COMPRESS FOR  OLTP;

11.2版本上:
CREATE TABLE  <table_name> COMPRESS FOR ALL OPERATIONS;

12.1版本上:
CREATE TABLE  <table_name> COMPRESS ROW STORE COMPRESS ADVANCED ;

例: (on 12.1 version)

SQL> CREATE TABLE t1 (c1 number) COMPRESS FOR ALL OPERATIONS;
Table created.
SQL> CREATE TABLE t2 (c2 number) COMPRESS FOR OLTP ;
Table created.
SQL> CREATE TABLE t3 (c3 number) ROW STORE COMPRESS ADVANCED ;
Table created.
SQL> col COMPRESS_FOR format a20
SQL> col TABLE_NAME format a20
SQL> select table_name, compression, compress_for from user_tables;

TABLE_NAME           COMPRESS COMPRESS_FOR
-------------------- -------- --------------------
T3                   ENABLED  ADVANCED
T2                   ENABLED  ADVANCED
T1                   ENABLED  ADVANCED

通过3种方法的设置结果是相同的,在12c上都表示为ADVANCED压缩 即OLTP压缩。

##OLTP压缩的处理逻辑
OLTP压缩并不是以SQL文(如insert、update)为单位进行处理的,而是以块(Block)为单位进行处理。
当DML(insert、update)进行处理时,如果块的使用率超过某临界值*1时,就会触发块内数据的压缩处理。

简单的处理逻辑可以概括如下:

0.某块为可以进行Insert的状态(容量并没有达到PCTFREE)。

1.和普通DML处理逻辑一样进行的数据的INSERT或UPDATE。

2.当由于INSERT或UPDATE处理导致块的使用率超过某临界值*1时,触发块内数据的压缩处理。
(INSERT或UPDATE的进程进行)

3.由于压缩处理,块内再次有了空余空间,正常进行INSERT处理(非压缩)。

4.块的使用率再次到达某临界值*1时,触发块内数据的压缩处理。

5. 循环步骤3和4。

最终效果是块内同时存在着压缩和非压缩的数据。

※关于触发压缩处理的临界值*1:
关于这个临界值通常根据块的空余大小、行大小、PCTFREE等因素,由Oracle内部算法算出。

##OLTP压缩和Redo、Undo
OLTP压缩时,块在被成功压缩前,为了一致的读取和事务回滚,需要把变更前的块保存到UNDO中。因此,在对OLTP压缩表进行更新和插入时会比非压缩表产生更多的UNDO;而产生UNDO时也会产生REDO,因此,OLTP压缩会导致相对较多的UNDO和REDO.

##参考

An Oracle White Paper January 2012
Advanced Compression with Oracle Database 11g

版权声明:本文为博主原创文章,转载请注明出处,谢谢。http://blog.csdn.net/lukeunique

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SQLplusDB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值