DB2 V9表壓縮(一)

rheet1978發表於2008-11-17

關鍵字:IBM DB2 V9 表壓縮 壓縮字典 資料行壓縮 值壓縮

內容提要:DB2 V9新增了可用來壓縮資料物件的基於字典的行壓縮功能。在壓縮資料時,通過使用較少的資料庫頁來表示相同資料,從而達到節省磁碟儲存空間的目的。對於那些行中包含重複模式的大型表,將能從此功能中受益。資料行壓縮(COMPRESS 子句)可與現有的空間值壓縮(VALUE COMPRESS子句)一起使用。

 

DB2 V9新增了可用來壓縮資料物件的基於字典的行壓縮功能。在壓縮資料時,通過使用較少的資料庫頁來表示相同資料,從而達到節省磁碟儲存空間的目的。對於那些行中包含重複模式的大型表,將能從此功能中受益。資料行壓縮(COMPRESS子句)可與現有的空間值壓縮(VALUE COMPRESS子句)一起使用。由於資料行壓縮是DB2 V9新增的功能,所以很多使用者對其特性不是很瞭解,本文將重點介紹DB2 V9資料行壓縮功能,並通過實際的例子來幫助大家理解和提高。

 

簡介      

在版本9之前,DB2有三種方式的壓縮,分別是空間值壓縮(VALUE COMPRESS子句)、索引壓縮(MDC技術)和資料庫備份壓縮。

使用空間值壓縮(VALUE COMPRESS子句)時,不會將變長資料型別(VARCHAR、VARGRAPHICS、LONG VARCHAR、LONG VARGRAPHIC、BLOB、CLOB和DBCLOB)的 空值(NULL)和零長度資料儲存在磁碟上。只有與這些資料型別相關聯的開銷值才會佔用磁碟空間。如果使用了VALUE COMPRESS,那麼還可以使用可選COMPRESS SYSTEM DEFAULT選項來進一步減少磁碟空間的使用量。如果插入的或更新的值等於列的資料型別的系統預設值,那麼使用的磁碟空間最少。預設值將不會儲存在磁碟上。支援COMPRESS SYSTEM DEFAULT的資料型別包括所有數字型別列、定長字元和定長圖形字串資料型別。這表示零和空格可以壓縮。

通過在建立表的時候指定ORGANIZE BY DIMENSIONS選項,將對錶的啟用MDC功能,可以指定一個或多個鍵作緯。MDC是使用基於塊的索引, 塊索引指向記錄塊或記錄組,而不是指向單個記錄。通過從物理上根據群集值將MDC表中的資料組織成塊,然後使用塊索引來存取這些塊,能顯著地改善效能。在MDC中,群集索引是基於塊的。這些索引比常規的基於記錄的索引要小很多,因此,佔用的磁碟空間更少,並且掃描時速度會更快。

如果資料庫中的資料量比較大,可以在備份資料庫的時候通過指定COMPRESS選項使用備份壓縮功能,從而是備份映像檔案需要的儲存空間最小。

DB2 V9新增了可用來壓縮資料物件的基於字典的行壓縮功能。在壓縮資料時,通過使用較少的資料庫頁來表示相同資料,從而達到節省磁碟儲存空間的目的。對於那些行中包含重複模式的大型表,將能從此功能中受益。資料行壓縮(COMPRESS子句)可與現有的空間值壓縮(VALUE COMPRESS子句)一起使用。對於使用行壓縮的表,查詢效能可能有所提高。可能需要更少的 I/O 操作來訪問壓縮資料,並且在壓縮後,可以將更多資料快取記憶體在緩衝池中。由於使用者資料壓縮在日誌記錄內,因此日誌記錄可能會變小。對於 UPDATE 日誌記錄,則可能不會出現這種情況。與行壓縮關聯的成本取決於壓縮和解壓縮資料所需的額外 CPU 週期。在訪問行中的資料時,壓縮和解壓縮是以行為單位執行的。要評估使用行壓縮後儲存器的節省情況,可使用 DB2 INSPECT 聯機實用程式的 ROWCOMPESTIMATE 選項。在啟用了表的COMPRESS 屬性並建立了壓縮字典之後,才可壓縮行。可通過 CREATE 或 ALTER TABLE 語句來設定 COMPRESS 屬性。可使用  REORG TABLE 命令來建立壓縮字典。在處理 REORG 命令時,現有的所有錶行都要被壓縮。資料行壓縮不適用於索引、LOB、LF 或 XML 物件。

在將表儲存在磁碟上時,如果對資料行、空值和系統預設值使用諸如壓縮之類的功能,則表可能佔用較少的空間。通過資料壓縮,可以使用較少的資料庫頁來儲存資料,從而節省磁碟儲存空間。由於每頁可以儲存更多的邏輯資料,因此訪問同樣多的邏輯資料時需要讀取的頁數將會少一些。這意味著壓縮還可以節省磁碟I/O。I/O速度也會加快,因為可以將更多的邏輯資料快取記憶體在緩衝池中。

由於資料行壓縮是DB2 V9新增的功能,所以很多使用者對其特性不是很瞭解,本文將重點介紹DB2 V9資料行壓縮功能,並通過實際的例子來幫助大家理解和提高。

       我們將按照下列順序介紹表壓縮:

1.         建立示例資料庫DB2TEST1:在此章節將一步步講解如何建立示例資料庫DB2TEST1,並建立示例表空間TABLESPACE1。

2.         對新表使用資料行壓縮(表壓縮):

a)         建立使用表壓縮功能的示例表TEST1,插入多條記錄;通過執行離線重組建立壓縮字典後,再插入剩餘記錄;

b)        通過INSPECT ROWCOMPESTIMATE語句進行估計壓縮的效果,注意,這個只是估計,和實際的壓縮可能會有出入;

c)        查詢系統表SYSIBM.SYSTABLES,看一下實際的壓縮效果;

d)        取消示例表TEST1的壓縮屬性,執行離線重組,對示例表TEST1進行解壓縮。

3.         對已經存在的表使用資料行壓縮(表壓縮):

a)         建立不使用表壓縮功能的示例表TEST2,插入資料;

b)        發出ALTER TABLE命令對示例表TEST2指定COMPRESS屬性,執行離線重組命令,給示例表TEST2建立壓縮字典並壓縮資料。

c)        表壓縮總結:總結第二步和第三步中用到的命令,以及表的壓縮屬性和壓縮字典在各種情況下表是否進行壓縮排行總結。

4.         對錶啟用空值、系統預設值壓縮:

a)         建立示例表TEST3,使用空值壓縮和系統預設值壓縮,插入資料;

b)        對示例表TEST3取消使用空值壓縮和系統預設值壓縮。

建立示例資料庫DB2TEST1

首先我們在WINDOWS XP環境下安裝DB2 ESE V9.1,安裝完成後,開啟一個DB2CLP視窗,發出CREATE DATABASE語句,建立示例資料庫DB2TEST1,具體如清單1所示:

- - 清單1. 建立示例資料庫DB2TEST1

C:\> DB2 CREATE DATABASE DB2TEST1

DB20000I  CREATE DATABASE命令成功完成。

 

命令執行成功,這樣我們建立了一個示例資料庫DB2TEST1。

下面我們繼續在DB2CLP視窗中,連上示例資料庫DB2TEST1,發出GETDB CFG命令,檢視示例資料庫的配置引數,在返回結果中可以看到,資料庫內碼表是1386,資料庫地域是CN,資料庫程式碼集是GBK,部分結果如清單2所示:

- - 清單2. 檢視示例資料庫DB2TEST1配置引數

C:\> db2 connect to db2test1

 

   資料庫連線資訊

 

 資料庫伺服器         = DB2 / NT 9.1.0

 SQL 授權標識         = RHETTE

 本地資料庫別名       = DB2TEST1

 

C:\> db2 get db cfg for db2test1

 

       資料庫 db2test1 的資料庫配置

 

 資料庫配置發行版級別                                    = 0x0b00

 資料庫發行版級別                                        = 0x0b00

 

 資料庫地域                                              = CN

 資料庫內碼表                                            = 1386

 資料庫程式碼集                                            = GBK

 資料庫國家/地區程式碼                                    = 86

 資料庫整理順序                                          = UNIQUE

 備用整理順序                              ( ALT_COLLATE ) =

 資料庫頁大小                                            = 4096

 

 . . . . . . . . . . . . . . . . . .

 

下面我們在示例資料庫DB2TEST1中建立1個4K頁大小的DMS表空間,用來存放示例表的資料,名稱為TABLESPACE1。

在DB2CLP視窗中,發出CREATE TABLESPACE命令,建立4K頁大小的示例表空間TABLESPACE1,對應的緩衝池使用預設建立的IBMDEFAULTBP,具體如清單3所示:

 

- - 清單3 . 建立DMS示例表空間

C:\> DB2 CREATE  REGULAR  TABLESPACE TABLESPACE1 PAGESIZE 4 K  MANAGED BY AUTOMATIC STORAGE BUFFERPOOL  IBMDEFAULTBP

DB20000I  SQL命令成功完成。

 

命令成功完成。注意,我們在MANAGED BY後面跟的是AUTOMATIC STORAGE,表示新建立的表空間將使用自動儲存。如果新建的表空間使用DB2管理儲存器(自動儲存器),根據要建立的表空間型別不同,其空間管理會有所區別,當其表空間型別是常規或者大型時,將自動建立成資料庫管理空間(DMS), 當其表空間型別是系統臨時或者使用者臨時時,將自動建立成系統管理空間(SMS)。使用自動儲存,就不再需要擔心如何新增容器以及監控容器的增長等,自動儲存會自動增加表空間在磁碟和檔案系統上的大小。在DB2CLP視窗中輸入LIST TABLESPACE命令,你可以看到示例表空間TABLESPACE1已經建立成功,表空間標識是3,其空間管理型別是資料庫管理空間,另外,資料庫預設建立的3個表空間也在結果集中,分別是SYSCATSPACE、TEMPSPACE1和USERSPACE1,具體如清單4所示:

- - 清單4 . 檢視示例表空間

C:\> db2 list tablespaces show detail

           當前資料庫的表空間

 表空間標識                        = 0

 名稱                       = SYSCATSPACE

 型別                                       = 資料庫管理空間

 內容                                = 所有持久資料。常規表空間。

 狀態                   = 0x0000

   詳細解釋:

     正常

 總計頁數                            = 8192

 可用頁數                            = 8188

 已用頁數                            = 7924

 可用頁數                            = 264

 高水位標記(頁)                    = 7924

 頁大小(以位元組計)                  = 4096

 擴充套件資料塊大小(頁)                = 4

 預取大小(頁)                      = 4

 容器數                                  = 1

 

 表空間標識                        = 1

 名稱                       = TEMPSPACE1

 型別                                       = 系統管理空間

 內容                                = 系統臨時資料

 狀態                   = 0x0000

   詳細解釋:

     正常

 總計頁數                            = 1

 可用頁數                            = 1

 已用頁數                            = 1

 可用頁數                            = 不適用

 高水位標記(頁)                    = 不適用

 頁大小(以位元組計)                  = 4096

 擴充套件資料塊大小(頁)                = 32

 預取大小(頁)                      = 32

 容器數                                  = 1

 

 表空間標識                        = 2

 名稱                       = USERSPACE1

 型別                                       = 資料庫管理空間

 內容                                = 所有持久資料。大型表空間。

 狀態                   = 0x0000

   詳細解釋:

     正常

 總計頁數                            = 8192

 可用頁數                            = 8160

 已用頁數                            = 96

 可用頁數                            = 8064

 高水位標記(頁)                    = 96

 頁大小(以位元組計)                  = 4096

 擴充套件資料塊大小(頁)                = 32

 預取大小(頁)                      = 32

 容器數                                  = 1

 

 表空間標識                        = 3

 名稱                       = TABLESPACE1

 型別                                       = 資料庫管理空間

 內容                                = 所有持久資料。常規表空間。

 狀態                   = 0x0000

   詳細解釋:

     正常

 總計頁數                            = 8192

 可用頁數                            = 8160

 已用頁數                            = 96

 可用頁數                            = 8064

 高水位標記(頁)                    = 96

 頁大小(以位元組計)                  = 4096

 擴充套件資料塊大小(頁)                = 32

 預取大小(頁)                      = 32

 容器數                                  = 1

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9524210/viewspace-496177/,如需轉載,請註明出處,否則將追究法律責任。

相關文章