DB2 10新特性: 自適應(yīng)壓縮

在剛剛發(fā)布的 DB2 LUW 10.1 中,引入了一種新的壓縮技術(shù)——自適應(yīng)壓縮。這種壓縮方案,是表壓縮和頁壓縮的混合體,即用戶的數(shù)據(jù)表在被表級字典壓縮之后,還會被數(shù)據(jù)頁一級的字典壓縮。

該方案繼承了原有表壓縮高壓縮率的優(yōu)點,同時利用動態(tài)的頁級字典,在提高壓縮率的同時,有效緩解了原有表壓縮靜態(tài)字典導(dǎo)致壓縮率隨數(shù)據(jù)變化衰減的問題

DB2 中的表壓縮

在數(shù)據(jù)大爆炸的時代背景下,數(shù)據(jù)壓縮的作用顯得越發(fā)重要。壓縮一方面可以節(jié)省數(shù)據(jù)存儲成本,另一方面可以提高數(shù)據(jù)的訪問效率。通常來說,壓縮是基于數(shù)據(jù)字典的。字典中記錄了數(shù)據(jù)中重復(fù)出現(xiàn)的、較長的模式和用來表示這些模式的、較短的符號。壓縮的過程就是將原始數(shù)據(jù)中的模式替換成符號,而解壓就是將壓縮后數(shù)據(jù)中的符號替換成原先的模式,從而還原出原始數(shù)據(jù)。

從 V9.1 開始,DB2 Linux Windows Unix 提供了對用戶表數(shù)據(jù)的行壓縮(Row Compression)支持,這一壓縮技術(shù)也稱為深度壓縮(Deep Compression)。行壓縮是針對先前已有的值壓縮技術(shù)提出的。值壓縮是將表不同行、同一列的重復(fù)數(shù)據(jù)只保存一份,其他地方僅是此處的引用而已。行壓縮則是以行為數(shù)據(jù)壓縮的基本單位,在壓縮過程中,行不會被拆為列來進(jìn)行處理。通過該技術(shù),用戶能夠為數(shù)據(jù)表建立一個表級別的數(shù)據(jù)字典,并使用該字典來壓縮整個表中的全部數(shù)據(jù)。在對一個表啟用了壓縮之后,需要用戶執(zhí)行表重組在已有數(shù)據(jù)上建立字典,并壓縮已有數(shù)據(jù)。在向一個已經(jīng)啟用了壓縮、并且創(chuàng)建了字典的表中插入數(shù)據(jù)時,新數(shù)據(jù)會被壓縮;修改該表中的數(shù)據(jù)時,數(shù)據(jù)會被解壓,修改后再存入表中;查詢表中的數(shù)據(jù)時,數(shù)據(jù)會被解壓之后返回給用戶。如果表中的數(shù)據(jù)在建立字典之后發(fā)生劇烈變化,原先的字典就有可能不能很好的壓縮變化之后的數(shù)據(jù),這時候可以使用帶有重置字典選項的表重組命令來重新創(chuàng)建表壓縮字典(REORG TABLE … RESETDICTIONARY)并用新字典壓縮已有數(shù)據(jù)。

在 DB2 V9.1 中,表重組是創(chuàng)建字典的唯一方式,但是表重組的開銷較大,使用較為不便。通常的做法是,將一小部分?jǐn)?shù)據(jù)導(dǎo)入表中,在此之上進(jìn)行表重組建立字典,然后再進(jìn)入表中的數(shù)據(jù)就會被壓縮了。在 V9.5 中自動化了這一過程,增加了自動字典建立(ADC,Automatic Dictionary Creation)特性。在啟用了行壓縮之后,壓縮字典會在表中的數(shù)據(jù)增加到一定數(shù)量之后(默認(rèn)是 2M)自動創(chuàng)建,隨后進(jìn)入表中的數(shù)據(jù)就會被該字典壓縮。自動字典建立簡化了行壓縮的使用,使得用戶不再需要手工運行表重組來創(chuàng)建字典并壓縮數(shù)據(jù),字典會在數(shù)據(jù)進(jìn)入表示自動建立,在有了字典之后的數(shù)據(jù)也會自動被壓縮,這一過程無需用戶干預(yù)。

但是,與表重組建立的字典和壓縮的數(shù)據(jù)相比,ADC 創(chuàng)建的字典僅基于很少的一部分?jǐn)?shù)據(jù),因而相對使用離線表重組建立壓縮字典而言,ADC 的壓縮率較低。如果用戶想要得到較高的壓縮率,帶有重置字典選項的表重組操作還是必要的。

值得注意的是,一個用戶表的每個分區(qū)下的每個數(shù)據(jù)分區(qū)都有自己的表壓縮字典。分區(qū),指的是數(shù)據(jù)庫分區(qū)(Database Partition Feature,DPF)環(huán)境下的數(shù)據(jù)庫分區(qū);數(shù)據(jù)分區(qū),指的是范圍分區(qū)表(Range Partition Table)的數(shù)據(jù)分區(qū)。這兩種特性下表中的數(shù)據(jù)都是物理獨立存放的,因此它們都會有自己獨立的表壓縮字典。本文所提及的表級字典,如果沒有特殊說明,均指的是單一數(shù)據(jù)庫分區(qū)、非數(shù)據(jù)分區(qū)表中的表級字典。

以上簡單介紹了 DB2 V9.7 中已有的表壓縮特性,以及如何使用該特性建立字典并壓縮表中的數(shù)據(jù)。以表重組建立字典并壓縮數(shù)據(jù)為例,字典基于創(chuàng)建字典時表中數(shù)據(jù)而建立,所以該字典能夠代表此時表中的數(shù)據(jù)特征。然而,隨著表中的數(shù)據(jù)發(fā)生變化,比如新數(shù)據(jù)的插入,原有數(shù)據(jù)的更新,原數(shù)據(jù)的冗余特征就可能發(fā)生變化,而表壓縮的字典并不能自動根據(jù)這些變化動態(tài)發(fā)生變化,因此,在數(shù)據(jù)發(fā)生變化時,有時表壓縮的壓縮率會隨著數(shù)據(jù)變化而衰減。為了緩解這一問題,在最新的 DB2 LUW V10.1 中,引入了壓縮新特性——自適應(yīng)壓縮(Adaptive Compression)。

自適應(yīng)壓縮

剛才已經(jīng)提到,表壓縮的字典是靜態(tài)的,即字典在創(chuàng)建之后不會隨著數(shù)據(jù)的變化而發(fā)生變化,唯一能夠使字典發(fā)生變化的操作就是字典的重建——運行帶有重置字典選項的離線表重組操作;同時,表壓縮的字典對于整個表來說是全局的(暫不考慮數(shù)據(jù)庫分區(qū)特性 Database Partition Feature DPF 下的表,以及范圍分區(qū)表 Range Partition Table),即字典中的模式是從整個表中采樣出來的,從而能夠代表整個表的數(shù)據(jù)特征,因此在字典創(chuàng)建時,能夠把全表的數(shù)據(jù)都壓縮得較好。

同時,由于表壓縮的字典是靜態(tài)的,表中的數(shù)據(jù)在字典創(chuàng)建后發(fā)生變化時,字典并不會發(fā)生變化,從而使得表壓縮的壓縮率可能會隨著數(shù)據(jù)的變化而降低;由于表壓縮的字典是全局的,代表整個表的數(shù)據(jù)特征,有可能不能代表該表的某些局部特征,比如,一張表的某幾處相鄰若干條數(shù)據(jù)相似度非常高,由于這些冗余僅僅是局部的,并不能代表整張表的數(shù)據(jù)特征,因此表壓縮的字典并不能很好的反映這些冗余,這些數(shù)據(jù)可能就未能達(dá)到最佳的壓縮效果。

針對這兩個問題,自適應(yīng)壓縮應(yīng)運而生了。自適應(yīng)壓縮在原有的表壓縮基礎(chǔ)上,疊加了數(shù)據(jù)頁級別的壓縮。自適應(yīng)壓縮的解決方案,是傳統(tǒng)表壓縮和新的頁壓縮的組合。頁壓縮是動態(tài)的,在頁中的數(shù)據(jù)達(dá)到一定程度時,頁字典會自動被建立,并且已有數(shù)據(jù)會被自動壓縮,在頁中的數(shù)據(jù)發(fā)生變化后,壓縮率衰減到一定程度時,頁字典會自動被重建;頁壓縮的是局部的,它只針對其所在頁的數(shù)據(jù),因此對于聚簇數(shù)據(jù)(Clustered Data)壓縮效果更好。

頁壓縮技術(shù)也是行壓縮的一種,即行是壓縮的基本單位,壓縮過程中不會將行拆分為列來進(jìn)行處理。為了區(qū)別 V9.1 引入的的表級行壓縮技術(shù),本文將其稱為表壓縮,而將 V10.1 中自適應(yīng)壓縮中的頁級行壓縮稱為頁壓縮。自適應(yīng)壓縮是二者的組合。

操作系統(tǒng)中頁的概念類似,DB2 中的數(shù)據(jù)頁是 I/O 的最小單位。用戶的數(shù)據(jù)以及一些系統(tǒng)控制信息都以記錄(Record)的形式存放在數(shù)據(jù)頁中。DB2 中數(shù)據(jù)頁的大小是可以定義的,默認(rèn)是 4KB,除此之外,還有 8KB、16KB 和 32KB。頁壓縮針對的是同一數(shù)據(jù)頁中的數(shù)據(jù),頁壓縮的字典則是以系統(tǒng)內(nèi)部記錄的形式存放在數(shù)據(jù)頁中的。不同數(shù)據(jù)頁中由于數(shù)據(jù)不同,因而頁壓縮字典也不同。

在 DB2 LUW V10.1 中,針對自適應(yīng)壓縮在表定義的 SQL 語句中引入了一個新關(guān)鍵字—— ADAPTIVE,語法如清單 1 所示:

清單 1. 新關(guān)鍵字 ADAPTIVE 的語法

 				       .-COMPRESS NO---------------.   >-----+---------------------------+--        |              .-ADAPTIVE-. |        '-COMPRESS YES-+----------+-'                      '-STATIC---'

ADAPTIVE 代表對表啟用新的自適應(yīng)壓縮方案,而 STATIC 關(guān)鍵字則代表原有的表壓縮方案。在沒有指定 ADAPTIVE 關(guān)鍵字時,默認(rèn)啟用自適應(yīng)壓縮,即表壓縮加頁壓縮的組合壓縮方案,也就是說,指定壓縮選項時不指定壓縮類型是 ADAPTIVE 還是 STATIC,此時會隱式采用自適應(yīng)壓縮。如果要只使用原先的表壓縮,需要顯示指定 STATIC 關(guān)鍵字。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊12 分享