DB2 V9表壓縮(三)
下面我看一下如何對一個已經存在的表(表中有資料存在)啟用資料行壓縮(表壓縮),首先我們需要建立一個示例表 TEST2,並插入部分資料。接下來發出ALTER TABLE命令對示例表TEST2指定COMPRESS屬性,執行離線重組命令,給示例表TEST2建立壓縮字典並壓縮資料。
在DB2CLP視窗中,連上示例資料庫DB2TEST1,發出CREATE TABLE命令,建立示例表TEST2,初始不使用表壓縮功能(不指定COMPRESS關鍵字),具體如清單18所示:
- - 清單18 .建立示例表TEST2
C:\> db2 connect to db2test1
資料庫連線資訊
資料庫伺服器 = DB2 / NT 9.1.0
SQL 授權標識 = RHETTE
本地資料庫別名 = DB2TEST1
C:\> DB2 CREATE TABLE TEST2 ( ID INTEGER , NAME VARCHAR ( 10 ) , DEPARID VARCHAR ( 10 ) , NOTE VARCHAR ( 100 ) ) IN TABLESPACE1
DB20000I SQL命令成功完成。
命令執行成功,這樣我們就建立了示例表TEST2,其不使用表壓縮功能,接下來我們對示例表TEST2插入資料,部門編號都是‘001’,備註資訊都是‘TEST’,編號和姓名都不相同,具體如清單19所示:
- - 清單19 .對示例表TEST2插入部分資料
C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 1 , ' AA ' , ' 001 ' , ' TEST ')
DB20000I SQL命令成功完成。
C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 2 , ' BB ' , ' 001 ' , ' TEST ')
DB20000I SQL命令成功完成。
C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 3 , ' CC ' , ' 001 ' , ' TEST ')
DB20000I SQL命令成功完成。
C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 4 , ' DD ' , ' 001 ' , ' TEST ')
DB20000I SQL命令成功完成。
C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 5 , ' EE ' , ' 001 ' , ' TEST ')
DB20000I SQL命令成功完成。
C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 6 , ' FF ' , ' 001 ' , ' TEST ')
DB20000I SQL命令成功完成。
C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 7 , ' GG ' , ' 001 ' , ' TEST ')
DB20000I SQL命令成功完成。
C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 8 , ' HH ' , ' 001 ' , ' TEST ')
DB20000I SQL命令成功完成。
C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 9 , ' II ' , ' 001 ' , ' TEST ')
DB20000I SQL命令成功完成。
命令成功完成,這樣我們為示例表TEST2插入了9條記錄。部門編號都是‘001’,備註資訊都是‘TEST’,編號和姓名都不相同。
如果想對示例表TEST2啟用表壓縮功能,需要把表的COMPRESS選項改成YES。下面我們在DB2CLP視窗中,發出ALTER TABLE命令,把示例表TEST2的COMPRESS屬性設定為YES,具體如清單20所示:
- - 清單20 .對示例表TEST2啟用COMPRESS屬性
C:\> db2 alter table test2 compress yes
DB20000I SQL命令成功完成。
命令成功完成,此時示例表TEST2啟用了表壓縮功能,但是由於沒有壓縮字典的存在,所以示例表TEST2中的資料還不是以壓縮的方式儲存的。直到顯式的發出了離線REORG命令,建立了壓縮字典後,示例表TEST2中的資料才會真正的壓縮儲存。
下面我們對示例表TEST2建立一個壓縮字典,由於是第一次構建壓縮字典,所以需要執行帶RESETDICTIONARY選項的REORG命令。
在DB2CLP視窗中,對示例表TEST2發出REORG命令,執行離線重組,為示例表TEST2構建壓縮字典,具體如清單21所示:
- - 清單21 .對示例表TEST2建立壓縮字典
C:\> db2 REORG TABLE test2 resetdictionary
DB20000I REORG命令成功完成。
命令成功完成,這個命令將掃描整個表,建立壓縮字典,然後執行實際表的重組,並在重組的過程中壓縮資料。由於部門編號和備註資訊各行的資料都相同,所以將DB2通過分析與獲取資料中出現的重複模式,生成壓縮字典。
如果想檢視對示例表TEST2使用表壓縮(資料行壓縮)比不使用表壓縮節省了多少空間,可以通過INSPECT ROWCOMPESTIMATE語句進行評估分析,也可以檢視系統表SYSIBM.SYSTABLES檢視實際的壓縮效果,具體如前面所述。
下面我們來總結一下表壓縮的相關內容。
如果想對一個新表啟用表壓縮,可以按照以下步驟:
Ø 建立一個表,將表的COMPRESS屬性設定為 YES
Ø 對錶裝入一部分資料
Ø 執行帶有RESETDICTIONARY選項的離線重組,建立一個新的壓縮字典
Ø 裝入剩餘的資料到這個表中(裝入時將考慮壓縮字典並在裝入時壓縮資料)
如果想對一個已經存在的表(表中已經有資料)啟用表壓縮,可以按照以下步驟:
Ø 通過ALTER TABLE命令將表的COMPRESS屬性設定為 YES
Ø 執行帶有RESETDICTIONARY選項的離線重組,建立一個新的壓縮字典
如果想檢視對錶使用表壓縮(資料行壓縮)比不使用表壓縮節省了多少空間,可以通過INSPECT ROWCOMPESTIMATE語句進行評估分析。帶壓縮估計選項(ROWCOMPESTIMATE)的INSPECT命令,將生成一份報告,描述節省了多少頁。語法如下:
DB2 INSPECT ROWCOMPESTIMATE TABLE NAME table_name RESULTS KEEP file_name
由於INSPECT命令生成的檔案是二進位制的,無法直接檢視,所以我們需要使用DB2INSPF命令將此檔案格式轉成可讀模式才能檢視,具體語法如下:
DB2INSPF file_name output_file_name
資料行壓縮是基於字典的壓縮,每個字典是一個壓縮/解壓縮資料記錄的符號表。演算法是基於LEMPEL-ZIV(LZ)演算法,使用靜態字典,每張表一個字典,存放在永久表物件中。使用資料行壓縮的資料無論是在磁碟還是在記憶體都是壓縮的,只有在計算前才會被解壓縮,因此極大地節約了I/O頻寬和記憶體,但是增加了CPU消耗。對於壓縮的資料行其日誌也是壓縮的。對於經壓縮後不能節省儲存的行,DB2不對其進行壓縮處理,資料(每一行)中重複的串是高壓縮比的關鍵。文字資料一般壓縮得比較好,因為其中往往包括重複字串以及大量的重複字元、前導或字尾空格。
需要注意的是,通過執行CREATE TABLE或ALTER TABLE語句開啟表壓縮開關時,並不壓縮資料,資料僅在建立壓縮字典表後才能真正實現壓縮。壓縮字典表將在臨時記憶體中建立,大約需臨時佔用10M左右記憶體,臨時記憶體從UTILITIES HEAP中申請。字典的分析與生成基於表中已有的資料,是離線進行的,在以後的版本中將會支援線上進行,也就是說現在只能是在離線重組時建立壓縮字典,在將來的版本中將支援聯機重組時建立壓縮字典。
需要注意的是,執行離線重組(REORG)的時候,有兩個重要的選項,分別是RESETDICTIONARY和KEEPDICTIONARY,兩個含義和動作都是不一樣的。我們來分別來看一下:
當使用RESETDICTIONARY選項的REORG時
COMPRESS屬性 | 壓縮字典是否存在 | 結果 |
YES | YES | 建立新的字典表; 並重新壓縮全部資料 |
YES | NO | 建立新的字典表; 並壓縮資料 |
NO | YES | 刪除已有字典表,並將全部壓縮資料解壓縮 |
NO | NO | 不做任何操作 |
當使用KEEPDICTIONARY選項的REORG時
COMPRESS屬性 | 壓縮字典是否存在 | 結果 |
YES | YES | 保留已有字典表; 壓縮新增/變化資料 |
YES | NO | 建立新的字典表; 並壓縮資料 |
NO | YES | 保留已有字典表,但將全部壓縮資料解壓縮 |
NO | NO | 不做任何操作 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9524210/viewspace-496181/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DB2 V9表壓縮(一)DB2
- DB2 V9表壓縮(二)DB2
- DB2 V9表壓縮(四)DB2
- DB2 V9表分割槽(三)DB2
- DB2 V9表分割槽(四)DB2
- DB2 V9表分割槽(二)DB2
- DB2 V9表分割槽(一)DB2
- DB2 V9配置顧問程式(三)DB2
- Oracle表壓縮Oracle
- oracle 表壓縮Oracle
- Oracle壓縮黑科技(一)—基礎表壓縮Oracle
- oracle壓縮表(一)Oracle
- oracle壓縮表(二)Oracle
- oracle 的表壓縮Oracle
- Oracle表的壓縮Oracle
- 表壓縮技術
- DB2 V9聯機備份還原(三)DB2
- DB2 v9 overviewDB2View
- MySQL 5.6的表壓縮MySql
- MYSQL壓縮表測試MySql
- Sqlserver表和索引壓縮SQLServer索引
- 【表壓縮】使用表壓縮技術將表所佔用空間降低到最小
- myisampack工具(MyISAM表壓縮工具)
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- JAVA壓縮和解壓縮Java
- zip壓縮和解壓縮
- linux壓縮解壓縮Linux
- 字串的壓縮和解壓縮字串
- 檔案壓縮和解壓縮
- SQL Server 2008 表和索引的行壓縮和頁壓縮SQLServer索引
- MySQL壓縮表的一種應用MySql
- oracle 11g 新特性 表壓縮Oracle
- JS壓縮方法及批量壓縮JS
- aix 下壓縮與解壓縮AI
- linux壓縮和解壓縮命令Linux
- tar 分卷壓縮&解壓縮命令
- AIX 上壓縮與解壓縮AI
- DB2 V9配置顧問程式(七)DB2