您好,登錄后才能下訂單哦!
本篇文章為大家展示了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è)資訊頻道。
免責(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)容。