天天看點

DB2表壓縮功能

  實際上DB2表壓縮的方法是通過檢視整個表,找到重複的字元和字元串後,将那些字元和字元串存儲在一個壓縮字典中,然後用一個存儲在字典中對應資料字元串的替代符号來替代表中的實際資料,進而達到了壓縮資料的目的。一個壓縮屬性的表,肯定有他所對應的壓縮字典。

開啟表的壓縮功能:

create table tableName compress yes 或 alter table tableName compress yes

掃描表并建立對應的壓縮字典,并執行實際的表重組,進而壓縮資料(表中需要有資料,不能是空表,每個表都有自己的壓縮字典,新插入的資料也會繼續被壓縮):注意此時REORG使用的是RESETDICTIONARY選項

reorg table tableName resetdictionary 

對于壓縮後的表,如果想進行一次表重組,而不是重建資料字典,那麼:注意此時REORG使用的是KEEPDICTIONARY選項

reorg table tableName keepdictionary

DB2表壓縮功能

在壓縮前,我們通常想先評估一下表壓縮後能節省多少空間可以利用db2 inspect和db2inspf指令來實作:

通過INSPECT ROWCOMPESTIMATE語句進行評估分析。記住,這個指令隻是估計壓縮的效果,而不是檢視最終實際的壓縮效果,如果想檢視實際的壓縮效果,需要檢視系統表SYSIBM.SYSTABLES。帶壓縮估計選項(ROWCOMPESTIMATE)的INSPECT指令,将生成一份報告,描述節省了多少頁。文法如下:

DB2 INSPECT ROWCOMPESTIMATE TABLE NAME table_name RESULTS KEEP file_name 

    由于INSPECT指令生成的檔案是二進制的,無法直接檢視,是以我們需要使用DB2INSPF指令将此檔案格式轉成可讀模式才能檢視,具體文法如下:

DB2INSPF file_name output_file_name

最後打開檔案output_file_name就可以看到壓縮比例了

結果執行個體如下:

- - 清單12 .檢視示例表TEST1,看一下表壓縮方式節省了多少空間

DATABASE: DB2TEST1

VERSION : SQL09010

2007-10-25-21.14.03.500000

操作:ROWCOMPESTIMATE TABLE

模式名:RHETTE

表名:TEST1

表空間辨別:3 對象辨別:4

結果檔案名:test1.resp

表階段開始(有符号的辨別:4,無符号的:4;表空間辨別:3):RHETTE.TEST1

資料階段開始。對象:4 表空間:3

行壓縮估計結果:

通過壓縮而節省的頁數所占的百分比:56

通過壓縮而節省的位元組數所占的百分比:56

由于行大小太小而不适合壓縮的行數所占的百分比:0

壓縮字典大小:8192 個位元組。

擴充字典大小:3336 個位元組。

資料階段結束。

表階段結束。

處理已完成。2007-10-25-21.14.03.562000

如果我們對壓縮結果不滿意,現在想對示例表TEST1進行解壓縮,可以發出ALTER TABLE指令,把示例表TEST1的COMPRESS屬性設定為NO,再運作REORG指令執行脫機重組,具體如下:

db2 alter table tablenam compress no;

db2 reorg table tablenam resetdictionary;

 除了資料行壓縮以外,以前的空值壓縮在DB2 V9中繼續可以使用。建立表時,可使用可選 VALUE COMRESSION 子句來指定表在使用表級别也可能是列級别的節省空間的行格式。使用 VALUE COMRESSION 時,不會将已指定給已定義的變長資料類型(VARCHAR、VARGRAPHICS、LONG VARCHAR、LONG VARGRAPHIC、BLOB、CLOB 和 DBCLOB)的 NULL 和零長度資料存儲在磁盤上。隻有與這些資料類型相關聯的開銷值才會占用磁盤空間。如果使用了VALUE COMRESSION,那麼還可以使用可選 COMPRSS SYSTEM DEFAULT 選項來進一步減少磁盤空間的使用量。如果插入的或更新的值等于列的資料類型的系統預設值,那麼使用的磁盤空間最少。預設值将不會存儲在磁盤上。支援COMPRSS SYSTEM DEFAULT的資料類型包括所有數字類型列、定長字元和定長圖形字元串資料類型。這表示零和空格可以壓縮。要确定是否應考慮對表進行空間壓縮,應了解大多數值等于系統預設值或 NULL 值的表将受益于新的行格式

(關閉開啟)空值壓縮 db2 alter table tablenam (de)activate value compress

(關閉開啟)系統預設壓縮 db2 alter table tablenam (de)activate compress system default

或者在定義的表格的時候:db2 create table tablenam value compress

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

實際上DB2表壓縮的方法是通過檢視整個表,找到重複的字元和字元串後,将那些字元和字元串存儲在一個壓縮字典中,然後用一個存儲在字典中對應資料字元串的替代符号來替代表中的實際資料,進而達到了壓縮資料的目的。一個壓縮屬性的表,肯定有他所對應的壓縮字典。

實際上DB2表壓縮的方法是通過檢視整個表,找到重複的字元和字元串後,将那些字元和字元串存儲在一個壓縮字典中,然後用一個存儲在字典中對應資料字元串的替代符号來替代表中的實際資料,進而達到了壓縮資料的目的。一個壓縮屬性的表,肯定有他所對應的壓縮字典。

開啟表的壓縮功能:

Sql代碼

DB2表壓縮功能
DB2表壓縮功能
DB2表壓縮功能
  1. create table tableName compress yes 或 alter table tableName compress yes  
create table tableName compress yes 或 alter table tableName compress yes
           

掃描表并建立對應的壓縮字典,并執行實際的表重組,進而壓縮資料(每個表都有自己的壓縮字典,新插入的資料也會繼續被壓縮):

Sql代碼

DB2表壓縮功能
DB2表壓縮功能
DB2表壓縮功能
  1. reorg table tableName resetdictionary  
reorg table tableName resetdictionary
           

對于壓縮後的表,如果想進行一次表重組,而不是重建資料字典,那麼:

Sql代碼

DB2表壓縮功能
DB2表壓縮功能
DB2表壓縮功能
  1. reorg table tableName keepdictionary  
reorg table tableName keepdictionary
           

在壓縮前,我們通常想先評估一下表壓縮後能節省多少空間可以利用db2 inspect和db2inspf指令來實作:

Sql代碼

DB2表壓縮功能
DB2表壓縮功能
DB2表壓縮功能
  1. db2 inspect rowcompestimate table name tbname results keep tbfile   
  2. db2inspf tbfile alantab_output_RESULTFILE  
db2 inspect rowcompestimate table name tbname results keep tbfile

db2inspf tbfile alantab_output_RESULTFILE