您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么理解Oracle表壓縮”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
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<10; 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表壓縮”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。