数据压缩
概况
本章描述了几种数据压缩选项,它能够帮助你减少磁盘空间的使用,在某种情况下,还可以提高I/O性能。
- 多值压缩(MVC)
- 算法压缩(ALC)
- 行压缩
- 行标题压缩
- 自动压缩
- 哈希索引和连接索引行压缩
- 块级压缩(BLC)
压缩的目标是利用最少的位数(bits)来准确的表示信息。
压缩方法可分为物理方法和逻辑方法。
物理方法独立于数据本身意义对其进行重新编码, 而逻辑方法则通过一个更紧凑的集合来替换。
压缩通过在单位物理容量中存储更多的逻辑数据来降低存储成本。压缩产生更小的行,因此每个可以数据块存储更多行以减少数据块数量。
压缩还可以提高系统性能,因为每个查询返回更少的物理数据,同时压缩过的数据在内存中保持压缩状态,因此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将列中这些重复出现的值压缩。
MVC是一种无损的逻辑数据压缩形式,
块级压缩
数据块是I/O基本物理单位,用于定义TD如何处理数据。
当你指定了块级压缩选项,TD将以压缩格式存储数据来减少存储空间。
BLC可以应用到这几种类型的表:
- 主要数据,回退,甚至是无法重新启动的表
BLC还可以应用于这几种类型的子表:
- BLOB, CLOB, XML, JOIN INDEX, HASH INDEX和Reference index.
BLC独立应用于其他任何应用于相同数据的压缩类型。
BLC可以使用更多的CPU来动态压缩和解压数据,所以查询性能是否随BLC而增强取决于性能是否受I/O带宽或CPU使用率的限制。
网友评论