數(shù)據(jù)壓縮
概況
本章描述了幾種數(shù)據(jù)壓縮選項(xiàng),它能夠幫助你減少磁盤空間的使用,在某種情況下,還可以提高I/O性能。
- 多值壓縮(MVC)
- 算法壓縮(ALC)
- 行壓縮
- 行標(biāo)題壓縮
- 自動壓縮
- 哈希索引和連接索引行壓縮
- 塊級壓縮(BLC)
壓縮的目標(biāo)是利用最少的位數(shù)(bits)來準(zhǔn)確的表示信息。
壓縮方法可分為物理方法和邏輯方法。
物理方法獨(dú)立于數(shù)據(jù)本身意義對其進(jìn)行重新編碼, 而邏輯方法則通過一個更緊湊的集合來替換。
壓縮通過在單位物理容量中存儲更多的邏輯數(shù)據(jù)來降低存儲成本。壓縮產(chǎn)生更小的行,因此每個可以數(shù)據(jù)塊存儲更多行以減少數(shù)據(jù)塊數(shù)量。
壓縮還可以提高系統(tǒng)性能,因?yàn)槊總€查詢返回更少的物理數(shù)據(jù),同時壓縮過的數(shù)據(jù)在內(nèi)存中保持壓縮狀態(tài),因此FSG[1]緩存可容納更多行,從而減少磁盤I/O的大小。
[1]FSG cache: File Segment cache, a Teradata caching approach.
算法壓縮可以是有損或者是無損的,這取決于所選用的的算法。
TD的壓縮有一個很小的初始成本,但是即使對于小表的查詢,只要選擇的壓縮方法能過減小表的大小,這就是一個凈贏。
識別未壓縮,單值壓縮和多值壓縮表
SELECT dbt.DATABASENAME, dbt.TABLENAME,
MAX(CASE WHEN (compressvaluelist IS NOT NULL)
THEN (CASE WHEN INDEX(compressvaluelist,',') >0
THEN '3. MVC '
ELSE '2, SVC '
END)
ELSE '1. NONE'
END) AS COMPRESS_TYPE,
MIN(pds.Current_Perm) AS Current_Perm
FROM DBC.Columns AS dbt, (
SELECT t.DATABASENAME, t.TABLENAME,SUM(ts.CurretPerm) AS Current_Perm
FROM DBC.Tables as t, DBC.TableSize AS ts
WHERE t.DATABASENAME = ts.DATABASENAME
AND t.TABLENAME = ts.TABLENAME
AND ts.TABLENAME <> 'ALL'
HAVAING Current_Perm > 15000000000
GROUP BY 1,2) AS pds
WHERE dbt.DATABASENAME IN ('aaaa','bbbb')
AND dbt.DATABASENAME = pds.DATABASENAME
AND dbt.TABLENAME = pds.TABLENAME
---- HAVING COMPRESS_TYPE = '1. None'
GROUP BY 1, 2
ORDER BY 1, 3, 4 DESC, 2;
多值壓縮
在列定義時,你可以指定一個壓縮值列表,MVC將列中這些重復(fù)出現(xiàn)的值壓縮。
MVC是一種無損的邏輯數(shù)據(jù)壓縮形式,
塊級壓縮
數(shù)據(jù)塊是I/O基本物理單位,用于定義TD如何處理數(shù)據(jù)。
當(dāng)你指定了塊級壓縮選項(xiàng),TD將以壓縮格式存儲數(shù)據(jù)來減少存儲空間。
BLC可以應(yīng)用到這幾種類型的表:
- 主要數(shù)據(jù),回退,甚至是無法重新啟動的表
BLC還可以應(yīng)用于這幾種類型的子表:
- BLOB, CLOB, XML, JOIN INDEX, HASH INDEX和Reference index.
BLC獨(dú)立應(yīng)用于其他任何應(yīng)用于相同數(shù)據(jù)的壓縮類型。
BLC可以使用更多的CPU來動態(tài)壓縮和解壓數(shù)據(jù),所以查詢性能是否隨BLC而增強(qiáng)取決于性能是否受I/O帶寬或CPU使用率的限制。