DB2面向OLTP環境的物理數據庫設計:數據和索引壓縮

您可以通過使用內置在 DB2 for Linux, UNIX and Windows 數據庫中的壓縮功能來減少表、索引和備份映像的大小,從而減少數據所需的存儲量。 表和索引通常包含重復信息。這種重復可能是單獨或合并的列值,也可能是列值的共同前綴,或者是在 XML 數據中的重復模

您可以通過使用內置在 db2 for linux, unix and windows 中的壓縮功能來減少表、索引和備份映像的大小,從而減少數據所需的存儲量。 表和索引通常包含重復信息。這種重復可能是單獨或合并的列值,也可能是列值的共同前綴,或者是在 xml 數據中的重復模式。壓縮方法可以使用短字符串或符號來代替重復的信息。 您可以使用一些壓縮功能來減少存儲表和索引功能所需的空間,同時也可以采用一些功能來確定壓縮可以提供的節省。您還可以使用備份壓縮來減少備份的大小。 db2 version 9.7 的大多數版本中都包含的壓縮功能包括:

? 值壓縮
? 備份壓縮

以下額外的壓縮功能與 DB2 存儲優化特性的許可是一起提供的:

? 行壓縮,包括 XML 存儲對象的壓縮
? 臨時表壓縮
? 壓縮的暫時或永久表上的索引壓縮

行壓縮

行壓縮,有時也被稱為靜態壓縮,它用較短的符號字符串替換在各行中重復的值模式,從而壓縮數據行。 使用行壓縮的主要好處是,您可以在更小的空間中存儲數據,可以產生顯著的存儲成本節省。此外,因為您以較慢的速度使用存儲,所以可以推遲額外存儲空間的未來支出。 除了節省成本之外,行壓縮還可以提高性能。對壓縮數據的許多查詢可以用更少的 I/O 操作來執行,因為每次從磁盤讀取都會帶來更多數據。同樣,可以將更多數據緩存在緩沖池中,這會增加緩沖池命中率。然而,這里有一個權衡要考慮,數據壓縮和解壓需要使用額外的CPU周期。 一個表要為行壓縮做好準備,有兩個要求:

? 您必須使用 COMPRESS YES 子句創建或修改一個表,使該表具有使用壓縮功能的資格。
? 您必須從將要壓縮的表中建立一個值或符號的字典。根據您所使用的 DB2 數據庫產品的版本,建立壓縮字典的手段會有所不同。

在這兩個要求得到滿足后,就可以壓縮在表中插入或更新的數據了。

以下是在表和索引中啟用行壓縮的一個簡單示例:

CREATE TABLE T1 (C1 INT, C2 INT, C3 INT) COMPRESS YES
CREATE INDEX I1 ON T1(C1)
SELECT COMPRESSION FROM SYSCAT.INDEXES WHERE TABNAME=’T1’
COMPRESSION
———–
Y
1 record(s) selected.

行壓縮的良好候選者

檢查您的數據庫,確定數據庫內的哪些表可能是壓縮的候選者。最初,啟用數據壓縮是為了在現有的未壓縮表上節省存儲。稍后,數據壓縮可以幫助您優化未來的存儲增長。在數據庫現有的表和/或預期隨著時間的推移增長得更快的表中,可能會發現一些存儲“難題”。

很明顯,最大的表是行壓縮的候選者,但千萬不要忽視較小的表。如果您有數百或數千個較小的表,您可能會受益于壓縮許多較小的表的聚合效果。大和小在這里是相對的。數據庫的設計就決定著包含一百萬或幾百萬個行的表是大還是小。

幾百 KB 以下的小表不是良好的行壓縮的候選者,因為可以實現的空間節省并不足以抵消數據壓縮字典的存儲需求。小表的字典大小約為 100 KB,存儲在物理表數據對象中。作為一個經驗法則,應該考慮壓縮大小為 2 MB 或以上的小表。

只讀表是非常好的壓縮候選者。如果表中只有少量更新,那么該表可能是一個很好的候選者。如果某個表有大量的更新,那么該表可能不是壓縮的良好候選者。讀/寫比例為 70/30 或更高的表是優秀的壓縮候選者。 試圖壓縮這些表之前,先將大表分隔到它們自己的表空間中。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享