Exadata 混合列壓縮實戰一例
Exadata的中文白皮書中說到:
"Exadata Storage Server 提供了一種非常先進的壓縮功能,稱作混合列壓縮 (HCC),可顯著減少大型資料庫的儲存佔用。混合列壓縮可實現最高水平的資料壓縮,由於 I/O 減少,可大幅降低成本並顯著提高效能,這對於分析負載尤為有效。儲存壓縮率取決於具體的資料型別,通常在 5 至 20 倍之間。"
5-20倍是怎麼來的?到底如何進行有效的HCC壓縮?筆者通過實際的案例給來個直觀的認識
在一個實際的案例中,使用者有一張500GB+ 的表,考慮使用HCC進行壓縮
首先那該表的部分分割槽進行測試。把該表部分資料匯出成imp檔案
imp PARFILE=imp.par file=ECC_FST_TMPHIS_FST_COLLECT_DETAIL_TMPHIS_${partname}.dmp log=imp_ECC_FST_TMPHIS_FST_COLLECT_DETAIL_TMPHIS_${partname}.log buffer=33554432 full=y IGNORE=y
建立幾張空表,每個裡面都包含兩個分割槽,且設定為不同的壓縮模式
SQL> select table_name,PARTITION_NAME,COMPRESSION, COMPRESS_FOR from user_tab_partitions;
TABLE_NAME PARTITION_NAME COMPRESS COMPRESS_FOR
------------------------------ ------------------------------ -------- ------------
BIGTABLE_ARCHIVE_HIGH P201125 ENABLED ARCHIVE HIGH
BIGTABLE_ARCHIVE_HIGH P201126 ENABLED ARCHIVE HIGH
BIGTABLE_ARCHIVE_LOW P201125 ENABLED ARCHIVE LOW
BIGTABLE_ARCHIVE_LOW P201126 ENABLED ARCHIVE LOW
BIGTABLE_NONE P201125 NONE
BIGTABLE_NONE P201126 NONE
BIGTABLE_QUERY_HIGH P201125 ENABLED QUERY HIGH
BIGTABLE_QUERY_HIGH P201126 ENABLED QUERY HIGH
BIGTABLE_QUERY_LOW P201125 ENABLED QUERY LOW
BIGTABLE_QUERY_LOW P201126 ENABLED QUERY LOW
使用imp進行匯入後檢查空間佔用情況
SQL> select segment_name,round(100*sum(bytes)/1024/1024/1024)/100 GB from dba_segments where owner='SCOTT' and segment_name like 'BIGTABLE%' group by segment_name;
SEGMENT_NAME GB
------------------------- ------
BIGTABLE_ARCHIVE_LOW 8.49
BIGTABLE_QUERY_LOW 8.49
BIGTABLE_QUERY_HIGH 8.49
BIGTABLE_NONE 8.74
BIGTABLE_ARCHIVE_HIGH 8.5
結論1: imp匯入不同壓縮型別的表,不會壓縮資料
使用insert ... select 方式灌入,還是同樣大小
create table BIGTABLE_ARCHIVE_HIGH1 as select * from BIGTABLE_ARCHIVE_HIGH where 1=0;
insert into BIGTABLE_ARCHIVE_HIGH1 select * from BIGTABLE_ARCHIVE_HIGH;
SEGMENT_NAME GB
---------------------------- -------
BIGTABLE_ARCHIVE_HIGH1 8.49
結論2: insert select方式也不會壓縮資料
使用create table方式灌入資料
create table BIGTABLE_ARCHIVE_HIGH2 compress for archive high as select * from BIGTABLE_NONE;
SEGMENT_NAME GB
--------------------------- -------
BIGTABLE_ARCHIVE_HIGH2 .22
結論3: create table 方式實現壓縮!!
使用create table方式建立不同型別的HCC表
SEGMENT_NAME GB
--------------------------- --------
BIGTABLE_ARCHIVE_HIGH .219
BIGTABLE_ARCHIVE_LOW .297
BIGTABLE_QUERY_HIGH .336
BIGTABLE_QUERY_LOW .797
BIGTABLE_NONE 8.744
結論4: create不同型別的壓縮表,壓縮率逐次升高
使用move方式對原始非壓縮表進行壓縮處理
因目標表是二級分割槽表,需要一個個分割槽做
alter table BIGTABLE_NONE move subpartition P201125_P1 compress for archive high;
"Exadata Storage Server 提供了一種非常先進的壓縮功能,稱作混合列壓縮 (HCC),可顯著減少大型資料庫的儲存佔用。混合列壓縮可實現最高水平的資料壓縮,由於 I/O 減少,可大幅降低成本並顯著提高效能,這對於分析負載尤為有效。儲存壓縮率取決於具體的資料型別,通常在 5 至 20 倍之間。"
5-20倍是怎麼來的?到底如何進行有效的HCC壓縮?筆者通過實際的案例給來個直觀的認識
在一個實際的案例中,使用者有一張500GB+ 的表,考慮使用HCC進行壓縮
首先那該表的部分分割槽進行測試。把該表部分資料匯出成imp檔案
imp PARFILE=imp.par file=ECC_FST_TMPHIS_FST_COLLECT_DETAIL_TMPHIS_${partname}.dmp log=imp_ECC_FST_TMPHIS_FST_COLLECT_DETAIL_TMPHIS_${partname}.log buffer=33554432 full=y IGNORE=y
SQL> select table_name,PARTITION_NAME,COMPRESSION, COMPRESS_FOR from user_tab_partitions;
TABLE_NAME PARTITION_NAME COMPRESS COMPRESS_FOR
------------------------------ ------------------------------ -------- ------------
BIGTABLE_ARCHIVE_HIGH P201125 ENABLED ARCHIVE HIGH
BIGTABLE_ARCHIVE_HIGH P201126 ENABLED ARCHIVE HIGH
BIGTABLE_ARCHIVE_LOW P201125 ENABLED ARCHIVE LOW
BIGTABLE_ARCHIVE_LOW P201126 ENABLED ARCHIVE LOW
BIGTABLE_NONE P201125 NONE
BIGTABLE_NONE P201126 NONE
BIGTABLE_QUERY_HIGH P201125 ENABLED QUERY HIGH
BIGTABLE_QUERY_HIGH P201126 ENABLED QUERY HIGH
BIGTABLE_QUERY_LOW P201125 ENABLED QUERY LOW
BIGTABLE_QUERY_LOW P201126 ENABLED QUERY LOW
使用imp進行匯入後檢查空間佔用情況
SQL> select segment_name,round(100*sum(bytes)/1024/1024/1024)/100 GB from dba_segments where owner='SCOTT' and segment_name like 'BIGTABLE%' group by segment_name;
SEGMENT_NAME GB
------------------------- ------
BIGTABLE_ARCHIVE_LOW 8.49
BIGTABLE_QUERY_LOW 8.49
BIGTABLE_QUERY_HIGH 8.49
BIGTABLE_NONE 8.74
BIGTABLE_ARCHIVE_HIGH 8.5
結論1: imp匯入不同壓縮型別的表,不會壓縮資料
使用insert ... select 方式灌入,還是同樣大小
create table BIGTABLE_ARCHIVE_HIGH1 as select * from BIGTABLE_ARCHIVE_HIGH where 1=0;
insert into BIGTABLE_ARCHIVE_HIGH1 select * from BIGTABLE_ARCHIVE_HIGH;
SEGMENT_NAME GB
---------------------------- -------
BIGTABLE_ARCHIVE_HIGH1 8.49
結論2: insert select方式也不會壓縮資料
使用create table方式灌入資料
create table BIGTABLE_ARCHIVE_HIGH2 compress for archive high as select * from BIGTABLE_NONE;
SEGMENT_NAME GB
--------------------------- -------
BIGTABLE_ARCHIVE_HIGH2 .22
結論3: create table 方式實現壓縮!!
使用create table方式建立不同型別的HCC表
SEGMENT_NAME GB
--------------------------- --------
BIGTABLE_ARCHIVE_HIGH .219
BIGTABLE_ARCHIVE_LOW .297
BIGTABLE_QUERY_HIGH .336
BIGTABLE_QUERY_LOW .797
BIGTABLE_NONE 8.744
結論4: create不同型別的壓縮表,壓縮率逐次升高
使用move方式對原始非壓縮表進行壓縮處理
因目標表是二級分割槽表,需要一個個分割槽做
alter table BIGTABLE_NONE move subpartition P201125_P1 compress for archive high;
alter table BIGTABLE_NONE move subpartition P201125_P2 compress for archive high;
alter table BIGTABLE_NONE move subpartition P201125_P3 compress for archive high;
alter table BIGTABLE_NONE move subpartition P201125_P4 compress for archive high;
...
move時帶壓縮引數,就算在同一個Tablespace執行,也需要消耗一定的時間
Elapsed: 00:01:33.71
Elapsed: 00:00:33.59
Elapsed: 00:00:52.51
Elapsed: 00:01:03.91
SEGMENT_NAME GB
---------------------------------------- ----------
BIGTABLE_ARCHIVE_HIGH .219
BIGTABLE_MOVE_COMPRESS .266
結論5: move也能進行一定的壓縮,但壓縮率沒有 create table 方式高
綜上所述,對於大的分割槽表,最優化的壓縮方法應該是create table 方式
在前述的實際環境中,筆者使用了 archive high的方式,將原始表 576GB 壓縮為 16.9 GB, 壓縮比 39:1
alter table BIGTABLE_NONE move subpartition P201125_P3 compress for archive high;
alter table BIGTABLE_NONE move subpartition P201125_P4 compress for archive high;
...
move時帶壓縮引數,就算在同一個Tablespace執行,也需要消耗一定的時間
Elapsed: 00:01:33.71
Elapsed: 00:00:33.59
Elapsed: 00:00:52.51
Elapsed: 00:01:03.91
SEGMENT_NAME GB
---------------------------------------- ----------
BIGTABLE_ARCHIVE_HIGH .219
BIGTABLE_MOVE_COMPRESS .266
結論5: move也能進行一定的壓縮,但壓縮率沒有 create table 方式高
綜上所述,對於大的分割槽表,最優化的壓縮方法應該是create table 方式
在前述的實際環境中,筆者使用了 archive high的方式,將原始表 576GB 壓縮為 16.9 GB, 壓縮比 39:1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/78250/viewspace-1062080/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Hybrid Columnar Compression(HCC) 混合列壓縮Oracle
- 混合列壓縮(HCC)在OLAP及OLTP場景中的測試
- android圖片壓縮不失真實戰Android
- Python實現壓縮和解壓縮Python
- 壓縮Word,一鍵實現Word文件壓縮
- 利用Java實現zip壓縮/解壓縮 (轉)Java
- Flutter混合App實戰FlutterAPP
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- JAVA壓縮和解壓縮Java
- zip壓縮和解壓縮
- 【轉】7Z命令列解壓縮命令列
- linux壓縮解壓縮Linux
- 字串的壓縮和解壓縮字串
- 檔案壓縮和解壓縮
- 用ASP實現線上壓縮與解壓縮功能程式碼
- JAVA基礎:利用Java實現zip壓縮解壓縮(轉)Java
- 9章 RxJava混合實戰RxJava
- 實用的壓縮解壓工具:WinZip for MacMac
- 哈夫曼實現檔案壓縮解壓縮(c語言)C語言
- 【實驗】【索引壓縮】索引壓縮演示及優缺點總結索引
- JS壓縮方法及批量壓縮JS
- aix 下壓縮與解壓縮AI
- linux壓縮和解壓縮命令Linux
- tar 分卷壓縮&解壓縮命令
- AIX 上壓縮與解壓縮AI
- HDU 5339 Untitled (狀態壓縮列舉)
- JNI實現圖片壓縮
- 怎麼把影片壓縮?實用又簡單的壓縮影片方法
- Asp.net實現線上壓縮與解壓ASP.NET
- linux下壓縮解壓縮命令Linux
- linux壓縮和解壓縮命令整理Linux
- 簡單的zip壓縮和解壓縮
- Linux壓縮及解壓縮命令Linux
- linux壓縮和解壓縮命令大全Linux
- 壓縮或解壓檔案用的Linux命令?linux開發入門與實戰Linux
- 用Kotlin擼一個圖片壓縮外掛-實戰篇(三)Kotlin
- 【shell】用shell實現自動壓縮日誌並且清理壓縮包
- 第二屆學習影象壓縮挑戰賽