溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Oracle表的壓縮是怎樣的

發(fā)布時間:2021-11-12 09:18:57 來源:億速云 閱讀:568 作者:柒染 欄目:關(guān)系型數(shù)據(jù)庫

本篇文章為大家展示了Oracle表的壓縮是怎樣的,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

隨著數(shù)據(jù)庫的增長,我們可以考慮使用oracle的表壓縮技術(shù)。表壓縮可以節(jié)省磁盤空間、減少data buffer cache的內(nèi)存使用量、并可以顯著的提升讀取和查詢的速度。當(dāng)使用壓縮時,在數(shù)據(jù)導(dǎo)入和DML操作時,將導(dǎo)致更多的CPU開銷,然而,由于啟用壓縮而減少的I/O需求將抵消CPU的開銷而產(chǎn)生的成本。

表的壓縮對于應(yīng)用程序來說是完全透明的,對于決策支持系統(tǒng)(DSS)、聯(lián)機(jī)事務(wù)處理系統(tǒng)(OLTP)、歸檔系統(tǒng)(Archive Systems)來說表的壓縮是有益處的。我們可以壓縮表空間,表和分區(qū)。如果壓縮表空間,那么在默認(rèn)的情況下,表空間上創(chuàng)建的所有表都將被壓縮。只有在表執(zhí)行插入、更新或批量數(shù)據(jù)載入時,才會執(zhí)行數(shù)據(jù)的壓縮操作。

一、表壓縮的方法
Oracle提供了一下幾種類型的表壓縮方法:
1、Basic Compression:壓縮等級High,CPU開銷較小
2、OLTP Compression:壓縮等級High,CPU開銷較小
3、Warehouse Compression:壓縮等級Higher,CPU開銷較大(取決于壓縮參數(shù)是Low還是High)
4、Archive Compression:壓縮等級Highest,CPU開銷很大(取決于壓縮參數(shù)是Low還是High)

當(dāng)使用Basic Compression,warehouse Compression,Archive Compression類型的壓縮時,盡在發(fā)生批量數(shù)據(jù)導(dǎo)入時才會執(zhí)行壓縮。OLTP Compression被用于聯(lián)機(jī)事務(wù)處理系統(tǒng),可以對任意的SQL操作執(zhí)行數(shù)據(jù)壓縮。Warehouse Compression和Archive Compression可以獲得很高的壓縮等級,因為它們采用了Hybrid Columnar(混合列)壓縮技術(shù),Hybrid Columnar采用一種改良的列的存儲形式替代一行為主的存儲形式。Hybird Columnar技術(shù)允許將相同的數(shù)據(jù)存儲在一起,提高了壓縮算法的效率。當(dāng)使用混合列壓縮算法時,將導(dǎo)致更多的CPU開銷,因此這種壓縮技術(shù)適用于更新不頻繁的數(shù)據(jù)。

表的壓縮特征:

表壓縮方法 創(chuàng)建和修改表壓縮的語法 直接路徑插入 說明
Basic Compression compression [basic] 直接路徑插入的數(shù)據(jù)才會被壓縮 compression和compression basic是等價的,未使用直接路徑插入的數(shù)據(jù)不會被壓縮
OLTP Compression compression for oltp 不要求 使用Insert和Update的數(shù)據(jù)也將被壓縮
Warehouser Compression compression for query   [Low|High] 直接路徑插入的數(shù)據(jù)才會被壓縮
CPU開銷高,未采用直接路徑插入的行插入和行更新以行格式存儲,會降低壓縮等級(Low)
Archive Compression compression for archive [Low|High]
直接路徑插入的數(shù)據(jù)才會被壓縮
CPU開銷高,未采用直接路徑插入的行插入和行更新以行格式存儲,會降低壓縮等級(Low)


之前未壓縮的表可以通過alter table ... compression ... 語句進(jìn)行壓縮。在這種情況下,壓縮啟用前的記錄不會被壓縮,只有新插入或更新的數(shù)據(jù)才會進(jìn)行壓縮。同樣,通過alter table ... nocompression ...語句解除對一個表的壓縮,表內(nèi)已壓縮的數(shù)據(jù)還會繼續(xù)保持壓縮的狀態(tài),新插入的數(shù)據(jù)就不再被壓縮。

在warehouse compression模式下,compression for query high是默認(rèn)的;在archive compression模式下,compression for archive low是默認(rèn)的。

二、壓縮和分區(qū)表
一個表可以有壓縮的分區(qū)和未壓縮的分區(qū),不同的分區(qū)可以使用不同的壓縮方法。可以采用下列的方法改變分區(qū)的壓縮方法:
1、alter table ... modify partition ... compress ... ,該方法僅適用于新插入的數(shù)據(jù)。
2、alter table ... move partition ... compress ... ,該方法適用于新插入的數(shù)據(jù)和已存在的數(shù)據(jù)。

確定表是否被壓縮:
SQL> select table_name,compression,compress_for from user_tables;
TABLE_NAME                     COMPRESS COMPRESS_FOR
------------------------------ -------- ------------
COUNTRIES                      DISABLED BASIC                 //這里比較困惑,既然表沒有啟用壓縮,為什么compress_for里的壓縮方法確實basic呢?
JOBS                           DISABLED
EMPLOYEES                      ENABLED  BASIC
LOCATIONS                      DISABLED
DEPARTMENTS                    DISABLED
JOB_HISTORY                    DISABLED
REGIONS                        DISABLED

三、在壓縮表上添加和刪除列
在壓縮表上添加和刪除列有如下限制:
1、對于compression basic類型的壓縮,不能對新添加的列指定默認(rèn)值。例如:

SQL> alter table employees compress basic;
Table altered.

SQL> alter table employees add (a varchar(10) default 'AAA');
alter table employees add (a varchar(10) default 'AAA')
                           *
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables

SQL> alter table employees add (b number);
Table altered.

2、對于OLTP類型的壓縮,如果為新添加的列指定默認(rèn)值,則該列必須被設(shè)置為 NOT NULL,為可以為空的列添加默認(rèn)值不被支持。對于這一點,我認(rèn)為文檔的描述是錯誤的,原文是這樣的:OLTP compression - If a default value is specified for an added column, then the column must be NOT NULL. Added nullable columns with default values are not supported.   下面通過一個實驗來驗證:

SQL> alter table employees compress for oltp;
Table altered.

SQL> alter table employees add (c int default 10);
Table altered.

3、對于compression basic類型的壓縮,不支持列的刪除操作,例如:

SQL> alter table employees compress basic;
Table altered.

SQL> alter table employees drop column c;
alter table employees drop column c
                                  *
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables

4、對于OLTP類型的壓縮,能夠支持列的刪除操作,但是在數(shù)據(jù)庫內(nèi)部將列標(biāo)記為unused狀態(tài),避免長時間的解壓和重新壓縮的操作。

SQL> alter table employees compress for oltp;
Table altered.

SQL> alter table employees drop column c;
Table altered

上述內(nèi)容就是Oracle表的壓縮是怎樣的,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI