『壹』 如何壓縮oracle海量數據
一、應用場合
答:正如上面所說,壓縮技術一般應用在「海量數據」的范疇,在大數據量下並且重復率高的情境下應該的效果才好,適合於OLAP(報表系統)不適合OLTP(在線交易系統),當數據量小時作用還不是很大,只要數據量達到一定程度的時候使用這門技術才有意義。
二、壓縮技術的好處
1.節約空間:我認為壓縮技術的最大好處就是節約空間,在存儲設備空間很緊張的情況下更需要使用壓縮技術來緩解
2.減少memory/IO開銷:當使用了壓縮技術後,同等記錄對應的數據塊相對較少,自然而然IO開銷就小了
3.提高數據處理效率:原本10個數據塊的,經過壓縮後變成5個數據塊,但還是那些數據,可效率提高了一倍。
三、壓縮原理
答:我們都用過rar壓縮zip壓縮,其實這些壓縮的原理都很相似,當然在細微處理上有不同,數據塊壓縮原理上是使用長度較短符號來代替列中的每個值,由於符號佔用空間小於實際值,從而達到節約空間的效果,當列中重復值越多壓縮效果越好。
四、數據壓縮不適合OLTP系統
1.OLTP是一種多事務短時間片系統,有大量的DML操作,而DML操作我們都知道是有鎖lock的(insert update delete)當數據塊中記錄數多起來時,導致訪問這個數據塊的用戶就多,就是產生爭用和等待,從而降低了效率。
2.數據插入、更新和索引鍵值更新時,都要先解壓縮再更新,等待的時間會更長。
五、分區表的壓縮
1.分區表的每個分區都可以獨立壓縮
2.有些時候,分區表在創建時不設置分區壓縮屬性,當某個分區需要壓縮時,再獨立進行壓縮
3.如果在表級設置壓縮屬性的話,那麼所有分區都會啟動壓縮功能,反正如果是某幾個分區獨立壓縮,表級屬性上什麼也不寫的。
實驗
create table leo_partition1 (object_id,object_name) 創建一個六個分區的分區表,沒有指定壓縮
partition by range (object_id)
(
partition leo_p1 values less than (1000),
partition leo_p2 values less than (2000),
partition leo_p3 values less than (3000),
partition leo_p4 values less than (4000),
partition leo_p5 values less than (5000),
partition leo_max values less than (maxvalue)
)
as select object_id,object_name from dba_objects;
LS@LEO> select count(*) from leo_partition1;
COUNT(*)
----------
10351
LS@LEO> select partition_name,compression from user_tab_partitions where table_name='LEO_PARTITION1';
PARTITION_NAME COMPRESS
------------------------------ --------
LEO_MAX DISABLED
LEO_P1 DISABLED
LEO_P2 DISABLED
LEO_P3 DISABLED
LEO_P4 DISABLED
LEO_P5 DISABLED
LS@LEO> alter table leo_partition1 compress; 例如 定義表級壓縮屬性,此時所有分區都壓縮
LS@LEO> alter table leo_partition1 modify partition leo_p1 compress; 我們測試准對leo_p1 和 leo_p5分區進行壓縮,來說明分區可以獨立壓縮
Table altered.
LS@LEO> alter table leo_partition1 modify partition leo_p5 compress;
Table altered.
LS@LEO> select partition_name,compression from user_tab_partitions where table_name='LEO_PARTITION1';
PARTITION_NAME COMPRESS
------------------------------ -----------------------
LEO_MAX DISABLED
LEO_P1 ENABLED