共計 3699 個字符,預計需要花費 10 分鐘才能閱讀完成。
本篇內容介紹了“怎么理解 Oracle 表壓縮”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
1、官方文檔說法:
As your database grows in size, consider using table compression. Compression saves disk space, reduces memory use in the database buffer cache, and can significantly speed query execution during reads. Compression has a cost in CPU overhead for data loading and DML. However, this cost might be offset by reduced I/O requirements
隨著數據庫不斷增長,可以考慮使用表壓縮。壓縮可以節省磁盤空間,減少數據庫 buffer cache 內存使用,并且可以加速查詢。
壓縮對于數據裝載和 DML 操作有一定的 CPU 消耗。然而,這些消耗可以為 I / O 的減少而抵消。
表的壓縮對于應用程序來說是完全透明的,對于決策支持系統(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 開銷,因此這種壓縮技術適用于更新不頻繁的數據。
二、基本壓縮特點:
1)使用基本壓縮,只有當數據是直接路徑插入或更新記錄(direct-path insert and updated)時才會發生壓縮。
并且支持有線的數據類型和 SQL 操作。
二、如何啟用基本壓縮?
1)通過 create table 語句中指定 compress 條件。
2)通過 alter table .. compress; 來給現有表啟用壓縮;
3)通過 alter table .. nocompress; 來禁用表壓縮
三、在壓縮表上添加和刪除列
在壓縮表上添加和刪除列有如下限制:
1、對于 compression basic 類型的壓縮,不能對新添加的列指定默認值
– 測試過程:
TEST@ r7 select * from empd1;
no rows selected
TEST@ r7 select table_name,compression,compress_for from user_tables where table_name= EMPD1
TABLE_NAME COMPRESS COMPRESS_FOR
------------------------------ -------- ------------
EMPD1 DISABLED
TEST@ r7 INSERT INTO EMPD1 SELECT * FROM SCOTT.EMP WHERE ROWNUM
9 rows created.
TEST@ r7 COMMIT;
Commit complete.
TEST@ r7 alter table empd1 compress basic;
Table altered.
TEST@ r7 select table_name,compression,compress_for from user_tables;
TABLE_NAME COMPRESS COMPRESS_FOR
------------------------------ -------- ------------
TBUSINFLAG ENABLED OLTP
TCOMBI ENABLED OLTP
TCURRENTS ENABLED OLTP
TENTRUSTDIRECTION ENABLED OLTP
TINSTRUCTION ENABLED OLTP
TINSTRUCTIONSTOCK ENABLED OLTP
TOPERATOR ENABLED OLTP
TOUTCONFIRM ENABLED OLTP
TREALDEAL ENABLED OLTP
TSTOCKINFO ENABLED OLTP
TUNITSTOCK ENABLED OLTP
CUSTOMERS ENABLED OLTP
SYS_EXPORT_FULL_01 ENABLED OLTP
A ENABLED OLTP
B ENABLED OLTP
EMPD1 ENABLED BASIC
16 rows selected.
TEST@ r7 desc empd1;
Name Null? Type
----------------- -------- -------------
EMPNO NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
-- 添加有默認值的字段:不支持
TEST@ r7 alter table empd1 add (test varchar(10) default sysdate
alter table empd1 add (test varchar(10) default sysdate )
*
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables
-- 添加沒有默認值得字段:支持
TEST@ r7 alter table empd1 add (test varchar(10));
Table altered.
-- 對于 compression basic 類型的壓縮,不支持列的刪除操作
TEST@ r7 alter table empd1 drop column test;
alter table empd1 drop column test
*
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables
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. */
對于這一點,做個測試。對于 OLTP 類型的壓縮,該列為空也可以被添加。
TEST@ r7 alter table empd1 add (test1 varchar(10) default sysdate
Table altered.
對于 OLTP 類型的壓縮,能夠支持列的刪除操作,但是在數據庫內部將列標記為 unused 狀態,避免長時間的解壓和重新壓縮的操作。
TEST@ r7 alter table empd1 drop column test;
Table altered.
SQL ALTER TABLE EMPD1 DROP UNUSED COLUMNS; -- 刪除 unused 字段
“怎么理解 Oracle 表壓縮”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!