资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
数据压缩SQL Server 2012其他版本此主题尚未评级 - 评价此主题SQL Server 2012 支持表和索引的行压缩和页压缩。 您可以使用数据压缩功能帮助压缩数据库 中的数据并帮助减小数据库的大小。 除了节省空间之外,数据压缩还可以帮助提高 I/O 密集型 工作负荷的性能,因为数据存储在更少的页中,查询需要从磁盘读取的页更少。 但是,在与应 用程序交换数据时,在数据库服务器上需要额外的 CPU 资源来压缩和解压缩数据。 可以为以下 数据库对象配置数据压缩: 存储为堆的整个表。 存储为聚集索引的整个表。 整个非聚集索引。 整个索引视图。 对于已分区表和已分区索引,可为每个分区配置压缩选项,且对象的各个分区的压缩设 置不必相同。使用行压缩和页压缩时的注意事项使用行压缩和页压缩时,应注意以下事项: 在 Service Pack 或后续版本中,有关数据压缩的详细信息如有更改,恕不另行通知。 不是 SQL Server 的每个版本都提供压缩功能。 有关详细信息,请参阅 SQL Server 2012 各个版本支持的功能。 压缩功能不可用于系统表。 通过压缩可在一页上存储更多的行,但不会更改表或索引的最大行大小。 当最大行大小加上压缩开销超过最大行大小 8060 个字节时,不能对表启用压缩功 能。 例如,不能压缩具有 c1 char(8000) 和 c2 char(53) 列的表,因为存在额外的 压缩开销。 当使用 vardecimal 存储格式时,会在启用此格式时执行行大小检查。 对 于行压缩和页压缩,在最初压缩对象时会执行行大小检查,以后在每插入或修改一行时 也都会执行这一检查。 压缩功能要求遵循下面两条规则:o 固定长度类型的更新必须总是成功。o 禁用数据压缩必须总是成功。 即使已压缩的行可以容纳在页面中(意味着它小 于8060个字节),SQL Server也不允许对哪些在未压缩时无法容纳在行中的 更新。 当指定分区列表时,可以将各个分区的压缩类型设置为 ROW、PAGE 或 NONE。 如果未 指定分区列表,将使用语句中指定的数据压缩属性来设置所有分区。 创建表或索引时, 除非指定了其他压缩设置,否则数据压缩将设置为 NONE。 修改表时,除非指定了其他 压缩设置,否则将保留现有压缩设置。 如果指定的分区列表或分区超出范围,将生成错误。 非聚集索引不继承表的压缩属性。 若要压缩索引,必须显式设置索引的压缩属性。 默 认情况下,在创建索引时,索引的压缩设置将设置为 NONE。 对堆创建聚集索引时,除非指定了另一压缩状态,否则聚集索引会继承该堆的压缩状态。 如果堆配置为页级压缩,则只有在以下情况下,页才会进行页级压缩:o 在启用大容量优化的情况下大容量导入数据。o 数据是使用 INSERT INTO . WITH (TABLOCK) 语法插入的。o 表是通过执行带 PAGE 压缩选项的 ALTER TABLE . REBUILD 语句重新生成 的。 通过 DML 操作被分配到堆中的新页面将不会使用 PAGE 压缩,除非重新生成该堆。 重 新生成堆的方法有:删除压缩然后重新应用压缩,或者创建聚集索引然后再删除聚集索 引。 若要更改堆的压缩设置,要求对表重新生成所有非聚集索引,以便它们具有指向堆中的 新行位置的指针。 可以联机或脱机启用或禁用 ROW 或 PAGE 压缩功能。 当执行联机操作时,对堆启用压 缩功能是单线程的。 启用或禁用行压缩或页压缩的磁盘空间要求与创建或重新生成索引时的磁盘空间要求 相同。 对于已分区数据,可以通过每次对一个分区启用或禁用压缩功能来减少所需的 空间。 若要确定已分区表中分区的压缩状态,请查询 sys.partitions 目录视图的 data_compression 列。 压缩索引时,可以使用行压缩和页压缩来压缩叶级页。 非叶级页不接收页压缩。 由于大小的关系,大值数据类型有时不与普通行数据存储在一起,而是存储在特殊用途 的页上。 对于单独存储的数据,数据压缩不可用。 SQL Server 2005 中实现 vardecimal 存储格式的表在升级后会保留该设置。 可以向 具有 vardecimal 存储格式的表应用行压缩。但是,因为行压缩是 vardecimal 存储格 式的超集,所以不必保留 vardecimal 存储格式。 将 vardecimal 存储格式与行压缩 一起使用时,十进制值不会进一步压缩。 可以向具有 vardecimal 存储格式的表应用 页压缩;但是,vardecimal存储格式列可能不会实现进一步的压缩。注意SQL Server 2012支持vardecimal存储格式;但是,由于行级压缩可实现同样的目标, 储格式。后续版本的Microsoft SQL Server将删除该功能。请避免在新的开发工作中使 在使用该功能的应用程序。压缩对已分区表和已分区索引的影响如果对已分区表和已分区索引使用数据压缩,则应注意以下事项: 如果使用 ALTER PARTITION 语句拆分分区,则两个分区均继承原始分区的数据压缩属 性。 合并两个分区时,生成的分区将继承目标分区的数据压缩属性。 若要切换分区,该分区的数据压缩属性必须与表的压缩属性匹配。 可以使用两种语法变体来修改已分区表或已分区索引的压缩:下面的语法仅重新生成被引用分区:ALTER TABLE REBUILD PARTITION = 1 WITH (DATA_COMPRESSION = )o 下面的语法通过对未引用的任何分区使用现有压缩设置来重新生成整个表:ALTER TABLE REBUILD PARTITION = ALLPAGE ONWITH (DATA_COMPRESSIONPARTITIONS(),. )已分区索引使用 ALTER INDEX 遵循同样的原则。 删除聚集索引时,除非修改了分区方案,否则相应的堆分区将保留其数据压缩设置。如 果分区方案已更改,则所有分区都将重新生成为未压缩状态。 若要删除聚集索引并更 改分区方案,需要执行下列步骤1. 删除聚集索引。2. 使用指定压缩选项的 ALTER TABLE . REBUILD . 选项来修改表。 若要删除聚集索引,脱机操作的执行速度很快,因为只删除较高级别的聚集索引。 如 果联机删除聚集索引,则 SQL Server 必须重新生成堆两次,一次针对步骤 1,一次针 对步骤 2。压缩对复制的影响如果将数据压缩与复制一起使用,则应注意以下事项: 当快照代理生成初始架构脚本时,新架构将对表及其索引使用相同的压缩设置。 不能 仅对表启用压缩,而不对索引启用压缩。 对于事务复制,项目架构选项决定了必须对哪些依赖对象和属性编写脚本。 有关详细 信息,请参阅 sp_addarticle 。分发代理在应用脚本时,不对下级订阅服务器进行检查。 如果选择了压缩的复制,则 在下级订阅服务器上创建表将会失败。 在混合拓扑中,不启用压缩的复制。 对于合并复制,发布兼容级别优先于架构选项,并决定了将编写脚本的架构对象。 在混合拓扑中,如果不是必须支持新的压缩选项,则发布兼容级别应设置为下级订阅服 务器版本。 否则,应在创建表后在订阅服务器上压缩表。用户意图为表或索引复 制分区方案复制压 缩设置复制分区方案并在该分区上的订阅服务器上启用压 缩。正确正确复制分区方案,但不压缩订阅服务器上的数据。正确错误不复制分区方案,也不压缩订阅服务器上的数据。错误错误如果发布服务器上的所有分区均压缩,则压缩订阅服错误正确表列出了在复制期间控制压缩的复制设置。脚本对分本。对分 的压不对检查务器上的表,但不复制分区方案。缩。在表压缩对其他 SQL Server 组件的影响压缩发生在存储引擎中,数据以未压缩状态呈现给 SQL Server 的其他大部分组件。 这决定了 其他组件上的压缩效果仅限于以下方面: 大容量导入和导出操作 导出数据时,即使采用本机格式,数据也以未压缩的行格式输出。 这会导致导出的数 据文件的大小比源数据要大得多。导入数据时,如果已对目标表启用压缩,则存储引擎会将数据转换为压缩的行格式。 这 样所使用的 CPU 资源会比将数据导入未压缩表时使用的 CPU 资源多。如果以大容量方式将数据导入具有页压缩设置的堆,则在插入数据时,大容量导入操作 会尝试使用页压缩来压缩数据。 压缩对备份和还原没有影响。 压缩对日志传送没有影响。 数据压缩与稀疏列不兼容。 因此,无法压缩包含稀疏列的表,也不能将稀疏列添加到 压缩表。 启用压缩可以导致查询计划更改,因为数据是用不同的页数和每页不同的行数存储的。请参阅参考CREATE PARTITION SCHEME (Transact-SQL)CREATE PARTITION FUNCTION (Transact-SQL)CREATE TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)CREATE INDEX (Transact-SQL)ALTER INDEX (Transact-SQL)概念行压缩的实现页压缩的实现Unicode 压缩的实现行压缩的实现SQL Server 2012 其他版本Microsoft射丨 O S些 cc |住|本主题概述了数据库引擎是如何实现行压缩的。 此摘要提供了有助于您规划数据所需存储空间 的基本信息。启用压缩只会更改与数据类型相关联的数据的物理存储格式,而不会更改其语法或语义。 当对 一个或多个表启用压缩时,不需要更改应用程序。 新的记录存储格式主要有以下更改: 减少了与记录相关联的元数据开销。此元数据为有关列、列长度和偏移量的信息。在 某些情况下,元数据开销可能大于旧的存储格式。 它对于数值类型(例如,integer、decimal和float)和基于数值的类型(例如, date time和money )使用可变长度存储格式。 它通过使用不存储空字符的可变长度格式来存储定长字符串。注意将对所有数据类型的NULL和0值进行优化,从而使它们不占用任何字节。行压缩影响存储的方式下表介绍了行压缩是如何影响 SQL Server 中的现有类型的。 此表不包括通过使用页压缩可以 节省的空间。数据类型是否影 响存 储?说明tinyint否1个字节是所需的最小存储单位。smallint是如果值使用1个字节即可存储,则将只使用1个字节int是只使用所需字节数。例如,如果值可以用1个字节存 储空间。bigint是只使用所需字节数。例如,如果值可以用1个字节存 储空间。decimal是此存储与vardecimal存储格式完全相同。numeric是此存储与vardecimal存储格式完全相同。bit是元数据开销使此类型达到4个位。smallmoney是使用4字节整数表示整数数据。货币值乘以10000, 数点之后的所有位数。此类型具有类似于整数类型存储money是使用8字节整数表示整数数据。货币值乘以10000, 数点之后的所有位数。此类型的范围比smallmoney 更 型存储优化的存储
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号