您好,登錄后才能下訂單哦!
本篇文章為大家展示了Oracle表的壓縮是怎樣的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
隨著數據庫的增長,我們可以考慮使用oracle的表壓縮技術。表壓縮可以節省磁盤空間、減少data buffer cache的內存使用量、并可以顯著的提升讀取和查詢的速度。當使用壓縮時,在數據導入和DML操作時,將導致更多的CPU開銷,然而,由于啟用壓縮而減少的I/O需求將抵消CPU的開銷而產生的成本。
表的壓縮對于應用程序來說是完全透明的,對于決策支持系統(DSS)、聯機事務處理系統(OLTP)、歸檔系統(Archive Systems)來說表的壓縮是有益處的。我們可以壓縮表空間,表和分區。如果壓縮表空間,那么在默認的情況下,表空間上創建的所有表都將被壓縮。只有在表執行插入、更新或批量數據載入時,才會執行數據的壓縮操作。
一、表壓縮的方法
Oracle提供了一下幾種類型的表壓縮方法:
1、Basic Compression:壓縮等級High,CPU開銷較小
2、OLTP Compression:壓縮等級High,CPU開銷較小
3、Warehouse Compression:壓縮等級Higher,CPU開銷較大(取決于壓縮參數是Low還是High)
4、Archive Compression:壓縮等級Highest,CPU開銷很大(取決于壓縮參數是Low還是High)
當使用Basic Compression,warehouse Compression,Archive Compression類型的壓縮時,盡在發生批量數據導入時才會執行壓縮。OLTP Compression被用于聯機事務處理系統,可以對任意的SQL操作執行數據壓縮。Warehouse Compression和Archive Compression可以獲得很高的壓縮等級,因為它們采用了Hybrid Columnar(混合列)壓縮技術,Hybrid Columnar采用一種改良的列的存儲形式替代一行為主的存儲形式。Hybird Columnar技術允許將相同的數據存儲在一起,提高了壓縮算法的效率。當使用混合列壓縮算法時,將導致更多的CPU開銷,因此這種壓縮技術適用于更新不頻繁的數據。
表的壓縮特征:
表壓縮方法 | 創建和修改表壓縮的語法 | 直接路徑插入 | 說明 |
Basic Compression | compression [basic] | 直接路徑插入的數據才會被壓縮 | compression和compression basic是等價的,未使用直接路徑插入的數據不會被壓縮 |
OLTP Compression | compression for oltp | 不要求 | 使用Insert和Update的數據也將被壓縮 |
Warehouser Compression | compression for query [Low|High] | 直接路徑插入的數據才會被壓縮 | CPU開銷高,未采用直接路徑插入的行插入和行更新以行格式存儲,會降低壓縮等級(Low) |
Archive Compression | compression for archive [Low|High] | 直接路徑插入的數據才會被壓縮 | CPU開銷高,未采用直接路徑插入的行插入和行更新以行格式存儲,會降低壓縮等級(Low) |
之前未壓縮的表可以通過alter table ... compression ... 語句進行壓縮。在這種情況下,壓縮啟用前的記錄不會被壓縮,只有新插入或更新的數據才會進行壓縮。同樣,通過alter table ... nocompression ...語句解除對一個表的壓縮,表內已壓縮的數據還會繼續保持壓縮的狀態,新插入的數據就不再被壓縮。
在warehouse compression模式下,compression for query high是默認的;在archive compression模式下,compression for archive low是默認的。
二、壓縮和分區表
一個表可以有壓縮的分區和未壓縮的分區,不同的分區可以使用不同的壓縮方法。可以采用下列的方法改變分區的壓縮方法:
1、alter table ... modify partition ... compress ... ,該方法僅適用于新插入的數據。
2、alter table ... move partition ... compress ... ,該方法適用于新插入的數據和已存在的數據。
確定表是否被壓縮:
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類型的壓縮,不能對新添加的列指定默認值。例如:
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類型的壓縮,如果為新添加的列指定默認值,則該列必須被設置為 NOT NULL,為可以為空的列添加默認值不被支持。對于這一點,我認為文檔的描述是錯誤的,原文是這樣的: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類型的壓縮,能夠支持列的刪除操作,但是在數據庫內部將列標記為unused狀態,避免長時間的解壓和重新壓縮的操作。
SQL> alter table employees compress for oltp;
Table altered.
SQL> alter table employees drop column c;
Table altered
上述內容就是Oracle表的壓縮是怎樣的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。