您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“怎么理解Oracle表壓縮”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
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
隨著數(shù)據(jù)庫(kù)不斷增長(zhǎng),可以考慮使用表壓縮。壓縮可以節(jié)省磁盤空間,減少數(shù)據(jù)庫(kù)buffer cache內(nèi)存使用,并且可以加速查詢。
壓縮對(duì)于數(shù)據(jù)裝載和DML操作有一定的CPU消耗。然而,這些消耗可以為I/O的減少而抵消。
表的壓縮對(duì)于應(yīng)用程序來說是完全透明的,對(duì)于決策支持系統(tǒng)(DSS)、聯(lián)機(jī)事務(wù)處理系統(tǒng)(OLTP)、歸檔系統(tǒng)(Archive Systems)來說表的壓縮是有益處的。
我們可以壓縮表空間,表和分區(qū)。如果壓縮表空間,那么在默認(rèn)的情況下,表空間上創(chuàng)建的所有表都將被壓縮。只有在表執(zhí)行插入、更新或批量數(shù)據(jù)載入時(shí),才會(huì)執(zhí)行數(shù)據(jù)的壓縮操作。
一、表壓縮的方法
Oracle提供了一下四種類型的表壓縮方法:
1、Basic Compression:壓縮等級(jí)High,CPU開銷較小
2、OLTP Compression:壓縮等級(jí)High,CPU開銷較小
3、Warehouse Compression:壓縮等級(jí)Higher,CPU開銷較大(取決于壓縮參數(shù)是Low還是High)
4、Archive Compression:壓縮等級(jí)Highest,CPU開銷很大(取決于壓縮參數(shù)是Low還是High)
當(dāng)使用Basic Compression,warehouse Compression,Archive Compression類型的壓縮時(shí),盡在發(fā)生批量數(shù)據(jù)導(dǎo)入時(shí)才會(huì)執(zhí)行壓縮。
OLTP Compression被用于聯(lián)機(jī)事務(wù)處理系統(tǒng),可以對(duì)任意的SQL操作執(zhí)行數(shù)據(jù)壓縮。
Warehouse Compression和Archive Compression可以獲得很高的壓縮等級(jí),因?yàn)樗鼈儾捎昧薍ybrid Columnar(混合列)壓縮技術(shù),Hybrid Columnar采用一種改良的列的存儲(chǔ)形式替代一行為主的存儲(chǔ)形式。Hybird Columnar技術(shù)允許將相同的數(shù)據(jù)存儲(chǔ)在一起,提高了壓縮算法的效率。當(dāng)使用混合列壓縮算法時(shí),將導(dǎo)致更多的CPU開銷,因此這種壓縮技術(shù)適用于更新不頻繁的數(shù)據(jù)。
二、基本壓縮特點(diǎn):
1)使用基本壓縮,只有當(dāng)數(shù)據(jù)是直接路徑插入或更新記錄(direct-path insert and updated )時(shí)才會(huì)發(fā)生壓縮。
并且支持有線的數(shù)據(jù)類型和SQL操作。
二、如何啟用基本壓縮?
1)通過create table語句中指定compress條件。
2)通過alter table .. compress; 來給現(xiàn)有表啟用壓縮;
3)通過alter table .. nocompress; 來禁用表壓縮
三、在壓縮表上添加和刪除列
在壓縮表上添加和刪除列有如下限制:
1、對(duì)于compression basic類型的壓縮,不能對(duì)新添加的列指定默認(rèn)值
--測(cè)試過程:
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) --添加有默認(rèn)值的字段:不支持 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 --添加沒有默認(rèn)值得字段:支持 TEST@ r7>alter table empd1 add (test varchar(10)); Table altered. --對(duì)于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、對(duì)于OLTP類型的壓縮,如果為新添加的列指定默認(rèn)值,則該列必須被設(shè)置為 NOT NULL,為可以為空的列添加默認(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. */
對(duì)于這一點(diǎn),做個(gè)測(cè)試。對(duì)于OLTP類型的壓縮,該列為空也可以被添加。
TEST@ r7>alter table empd1 add (test1 varchar(10) default 'sysdate'); Table altered.
對(duì)于OLTP類型的壓縮,能夠支持列的刪除操作,但是在數(shù)據(jù)庫(kù)內(nèi)部將列標(biāo)記為unused狀態(tài),避免長(zhǎng)時(shí)間的解壓和重新壓縮的操作。
TEST@ r7>alter table empd1 drop column test; Table altered.
SQL> ALTER TABLE EMPD1 DROP UNUSED COLUMNS; --刪除unused字段
“怎么理解Oracle表壓縮”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。