Table CompressionOLTP压缩(OLTP Compression)
Posted SQLplusDB
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Table CompressionOLTP压缩(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
以上是关于Table CompressionOLTP压缩(OLTP Compression)的主要内容,如果未能解决你的问题,请参考以下文章