DB2通过深度压缩进行存储优化:行压缩

行压缩自 DB2 for Linux, UNIX, and ">Windows 9.1 版本产品(DB2 9.1 版本)开始引入。自此以后每个版本均对行压缩功能进行了大幅改进,并在 DB2 10.1 版本的新一代自适应压缩功能中达到极致。行压缩要求具备 DB2 Storage Optimization Feature 许可。

通过压缩技术节省存储空间通常意味着减少读取压缩表中的数据的物理 I/O 操作,因为存储相同数目的行占用的页面数更少。由于压缩技术可在相同数目的页面中打包更多的数据行,因而缓冲池命中率上升。在许多情况下,I/O 节省和缓冲池利用率提升会增加吞吐量并加快查询执行时间。

您可以分别对每个表进行行压缩。执行行压缩将会节省绝大多数实用表的存储空间。压缩率通常为 50% - 80% 或者更高。采用行压缩的表占用的存储空间绝不会超过同一个表的未压缩版本。

自 DB2 10.1 版本开始,包含以下两种类型的行压缩:

• 经典行压缩,指以下数据采用的压缩技术:

o 自 DB2 9.1 版本开始引入的用户表数据

o 自 DB2 for Linux, UNIX, and Windows 9.7 版本产品(DB2 9.7 版本)开始引入的 XML 数据和临时数据

• 自适应行压缩,自 DB2 10.1 版本开始引入的全新压缩模式,适用于用户表数据。自适应行压缩优于经典行压缩,它往往能够达到更好的压缩效果,同时保证压缩率接近最佳水平所需的数据库维护工作也更少。

经典行压缩

经典行压缩以基于字典的压缩算法为基础。每个表对象都对应一个压缩字典。该字典包含一种在整个表各行中频繁出现的模式映射。这种压缩字典称作“表级压缩字典”。

要执行行压缩,您必须启用压缩表,且数据或 XML 对象必须包含字典。要于创建表时在 DB2 10.1 版本中对表启用经典行压缩,请执行以下语句:

CREATE TABLE … COMPRESS YES STATIC

要对现有的表启用该压缩模式,请执行以下语句:

ALTER TABLE … COMPRESS YES STATIC

在 DB2 10.1 版本中,上述两种情况均强制执行 COMPRESS YES 语句的 STATIC 选项。在早期 DB2 版本中,无需进行任何进一步资格限定即可直接使用 COMPRESS YES 语句,如下所示:

CREATE TABLE … COMPRESS YES
ALTER TABLE … COMPRESS YES

为使经典行压缩在启用压缩功能的表中开始发挥作用,该表必须具有字典。如果您使用的是 DB2 9.1,则必须留意是否具有压缩字典,如有必要,请执行经典表重组或运行 INSPECT 实用程序来创建字典。

随着 DB2 for Linux, UNIX, and Windows 9.5 版本(DB2 9.5 版本)引入自动字典创建(Automatic Dictionary Creation,ADC)功能,表级字典的构建过程变得更加自动化。采用 ADC 后,每当启用压缩功能的表的大小超过 2 MB 时,接下来的插入操作都会触发表级压缩字典的构建过程。但是,不会对现有的行应用任何压缩模式:只有后续插入或更新才会产生压缩行。

自 DB2 9.5 版本开始,ADC 和经典表重组一直是构建表级压缩字典的两种主要方式。这两种方式会在各自产生的压缩率方面有所不同。ADC 根据创建字典之时出现的数据创建压缩字典。如果该表出现大幅增长或显著变化,则构建字典之时将仅包含该表中的一小部分数据。因此,系统可能仅会对这一小部分数据执行模式检测。但在经典表重组中,则会对整个表进行扫描,并会运用均匀分布于整个表的记录样例构建字典。

鉴于此,随着时间的推移,通过 ADC 构建的字典的存储空间节约量可能会低于经典表重组期间构建的字典。同样,久而久之,数据频繁更新的表的表级字典模式有效性可能会下降,无法再有效压缩这些不断变化的数据,进而导致压缩率下降。在这种情况下,可能需要定期执行经典表重组,以便始终保持较高的存储空间节约比率。

时间: 2024-09-28 10:23:23

DB2通过深度压缩进行存储优化:行压缩的相关文章

DB2通过深度压缩进行存储优化:应用策略

确定要压缩的一组表和索引后,接下来需要对这些表启用压缩.更改现有表的压缩设置,填入数据以帮助其减缓增长速度,随后插入的数据将得益于新的压缩设置.如果您的目标是减少现有数据占用的http://www.aliyun.com/zixun/aggregation/17325.html">存储空间,或许也可能是要减少数据库分配的物理空间,那么您必须对此类数据执行压缩. 您可以应用以下策略,从而帮助对大量现有数据应用压缩功能,释放此类数据当前消耗的磁盘空间,为文件系统腾出空间.当您首次实施行压缩或索引

DB2通过深度压缩进行存储优化:临时表压缩

自 DB2 9.7 版本起,如果您具备 DB2 Storage Optimization Feature 许可,则可以对临时表应用压缩功能.与行压缩和索引压缩不同,您不必对临时表启用压缩功能.压缩会完全自动执行,且适用于用户定义的表和系统临时表. 用户可在不同情况下使用临时表.系统中包含大量用户定义的全局临时表,它们以两个变体存在:已创建的全局临时表 (CGTT) 和已声明的全局临时表 (DGTT).某些实用程序和维护操作(如表重组和数据再分布)也使用临时表.在查询处理期间,数据库管理器可能需要

DB2通过深度压缩进行存储优化:值压缩的替代行格式

本文档介绍了 DB2 Storage Optimization Feature 与 DB2® for Linux®, UNIX®, and Windows® 产品搭配使用的最佳实践.本文阐释了如何使此功能成为拓宽大型 OLTP http://www.aliyun.com/zixun/aggregation/13999.html">工作负载或数据仓库空间意识存储策略的关键驱动因素. 您可以使用 DB2 Storage Optimization Feature 对各类持久存储数据和临时数据进行

DB2通过深度压缩进行存储优化:备份映像和日志归档压缩

自 DB2 Universal Database Version 8 开始,您已经能够压缩备份映像.自 DB2 10.1 版本开始,也可以对日志归档应用压缩功能.无论您是否具备 DB2 Storage Optimization Feature 许可,都可以使用这些功能. 用于压缩备份映像和归档日志的默认算法与 compress(1) UNIX 实用程序采用的算法类似. 备份压缩 您可以为各备份映像单独启用备份压缩.当执行备份操作时,请指定 COMPRESS 语句,具体例子如下所示: BACKUP

Informix Dynamic Server数据压缩和存储优化

IDS存储优化如何工作 IDS存储优化会考虑整行和其中的所有列(除了作为字节串存储在行之外的列数据,比如BLOB数据).然后,IDS寻找重复出现的模式,把这些模式作为符号存储在压缩词典中,见图1. 图1. 作为符号存储在词典中的模式 在创建词典之后,IDS在词典存储库中存储它. 表的存储优化过程涉及四个步骤: 创建压缩词典. 压缩表或表片段中行中的数据. 重新组合表或片段行. 回收空闲的空间. 下面几节详细讨论每个步骤. 创建压缩词典 为了创建词典,IDS从现有的表中取样一些行并创建一个符号词典

如何使用重复数据删除技术实施主存储优化

主要文件系统存储优化(也就是在同样的空间塞进更多的数据)继续在日益普及.这里的挑战是主存储的重复数据删除并不是没有规则的.你不能删除这个重复的数据,也不能删除那个重复的数据,你必须要认识到删除重复数据之后对设备性能的影响. EMC已经宣布了在自己的Celerra平台上删除重复数据的功能.NetApp使用这个功能已经有一段时间了.其它厂商也以积极的方式增加这个功能,其方法是在数据不流动之后对数据进行压缩和删除重复数据.然后,Storwize等公司一直以在线实时压缩的方式提供这种功能. 正如存储虚拟

任意列搜索之 列存储优化

标签 PostgreSQL , 列存储 , shard , 切片 , 大块 , 小块 , sort , 块级索引 , bitmap scan , 索引延迟 , 归整 背景 数据分析系统,决策系统的数据量通常非常庞大,属性(列)非常多,可能涉及到任意列的组合条件查询,筛选结果.聚合结果.多维分析等. 这种场景如何优化能满足实时的响应需求呢? PostgreSQL中有一些技术,可以满足此类场景. 1. 内置bitmapAnd bitmapOr,使用任意字段的索引搜索时,可以快速跳过不满足条件的块,快

解密OpenTSDB的表存储优化

摘要  OpenTSDB是一个分布式的.可伸缩的时间序列数据库,在DB-engines的时间序列数据库排行榜上排名第五.它的特点是能够提供最高毫秒级精度的时间序列数据存储,能够长久保存原始数据并且不失精度.它拥有很强的数据写入能力,支持大并发的数据写入,并且拥有可无限水平扩展的存储容量.         它的强大的数据写入能力与存储能力得益于它底层依赖的HBase数据库,也得益于它在表结构设计上做的大量的存储优化.         本篇文章会详细讲解其表结构设计,在理解它的表结构设计的同时,分析

高阶魔方与数据编排 - 数据库存储优化之路

标签 PostgreSQL , cluster , 预排 , 一维数据 , 多维数据 , 视觉编排 , 数据编排 , IO优化 背景 中华文化源远流长,比如这句古语"远水不救近火,远亲不如近邻",在数据库的优化中亦有体现.接下来我们来揭示这个道理. 大多数数据库的存储为块存储,一个块里面可能涉及到多条记录,当用户输入查询条件进行数据检索时,即使返回的结果集较小,也可能需要扫描多个数据块,因为你不知道你要的记录落在哪些数据块里面. 例子 随机写入一批数据 create table tbl