您的位置:首页 > 编程语言 > PHP开发

【Table Compression】OLTP压缩(OLTP Compression)

2016-07-03 15:22 567 查看
OLTP压缩概述

OLTP压缩的设置方法

OLTP压缩的处理逻辑

OLTP压缩和RedoUndo

参考

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息