SQL Server 2012笔记分享-10:理解数据压缩

关键概念

配置数据压缩可以通过SSMS和T-SQL语句两种方式来实现。

表和索引压缩

对于行存储表和索引,使用数据压缩功能可帮助减小数据库的大小。 除了节省空间之外,数据压缩还可以帮助提高 I/O 密集型工作负荷的性能,因为数据存储在更少的页中,查询需要从磁盘读取的页更少。 但是,在与应用程序交换数据时,在数据库服务器上需要额外的 CPU 资源来压缩和解压缩数据

对于列存储表和索引,所有列存储表和索引始终使用列存储压缩,并且用户无法对此进行配置。 在您能够付出额外的时间和 CPU 资源来存储和检索数据的情况下,使用列存储存档压缩可进一步减少数据大小。

行压缩和页压缩

启用压缩只会更改与数据类型相关联的数据的物理存储格式,而不会更改其语法或语义。

行压缩的实现:http://msdn.microsoft.com/zh-cn/library/cc280576.aspx

表、表分区、索引和索引分区的页压缩都是类似的。

页压缩的实现:http://msdn.microsoft.com/zh-cn/library/cc280464.aspx

sp_estimate_data_compression_savings

返回所请求对象的当前大小并估算对象在所请求的压缩状态下的大小。 可对所有表或部分表评估压缩。 这包括堆、聚集索引、非聚集索引、索引视图以及表和索引分区。 可使用行压缩或页压缩来压缩这些对象。 如果表、索引或分区已经过压缩,则可使用该过程来估计在重新压缩的情况下该表、索引或分区的大小。

可使用 sp_estimate_data_compression_savings 估算对表或分区启用行压缩或页压缩时可能带来的节省量。 例如,如果行的平均大小可以减少 40%,则可能可以将对象大小减少 40%。 您可能无法节省空间,因为这取决于填充因子和行大小。 例如,如果某行长度为 8000 字节并且您将该行的大小减少 40%,则数据页上仍只能容纳一行。 因此不会节省空间。

如果运行 sp_estimate_data_compression_savings 的结果指示表的大小将增长,则表示表中的许多行使用的几乎是数据类型的完全精度,因而为满足压缩格式的需要而增加的少量开销大于该压缩所带来的节省量。 在这种极个别的情况下,请不要启用压缩。

如果对表启用压缩,请使用 sp_estimate_data_compression_savings 估算在未压缩该表的情况下该行的平均大小。

在此操作期间将获取该表的 (IS) 锁。 如果不能获取 (IS) 锁,则该过程将被阻止。 该表将在已提交读隔离级别下进行扫描。

如果请求的压缩设置与当前的压缩设置相同,则该存储过程将返回在没有数据碎片且使用现有填充因子时的估计大小。

如果索引或分区 ID 不存在,将不返回任何结果。

参考:http://msdn.microsoft.com/zh-cn/library/cc280574.aspx

节省磁盘IO和内存

Unicode压缩

SQL Server 使用 Unicode 标准压缩方案 (Standard Compression Scheme for Unicode, SCSU) 算法实现来压缩在行或页压缩对象中存储的 Unicode 值。 对于这些压缩对象,Unicode 压缩对于 nchar(n) 和 nvarchar(n) 列而言是自动的。 数据库引擎 将 Unicode 数据存储为 2 个字节,无论区域设置如何。 这称为 UCS-2 编码。 对于某些区域设置而言,在 SQL Server 中实现 SCSU 压缩可节省高达 50% 的存储空间。

http://msdn.microsoft.com/zh-cn/library/ee240835.aspx

参考资料:http://msdn.microsoft.com/zh-cn/library/cc280449.aspx

SQL Server 2012笔记分享-10:理解数据压缩,布布扣,bubuko.com

时间: 2024-09-28 14:47:07

SQL Server 2012笔记分享-10:理解数据压缩的相关文章

SQL Server 2012笔记分享-5:理解SQLOS

描述 SQLOS是一个单独的应用层,它位于SQLServer数据库引擎的最低层,SQLServer和SQL Reporting Services都是在顶层运行.SQLOS介于windows操作系统和SQL server之间. 为什么开发SQLOS SQLServer的早期版本在存储引擎和实际操作系统之间使用瘦接口层,通过该接口层,SQLServer可以调用操作系统来执行内存分配,计划资源,线程和工作管理,以及同步对象.不过,SQLServer中需要访问这些接口的服务可以位于引擎的任何部分.SQL

SQL Server 2012笔记分享-9:理解列存储索引

优点和使用场景 SQL Server 内存中列存储索引通过使用基于列的数据存储和基于列的查询处理来存储和管理数据. 列存储索引适合于主要执行大容量加载和只读查询的数据仓库工作负荷. 与传统面向行的存储方式相比,使用列存储索引存档可最多提高 10 倍查询性能,与使用非压缩数据大小相比,可提供多达 7 倍数据压缩率. SQL 2012和SQL 2014列存储索引的比较 在SQL server 2012中,一旦启用了列存储索引,将不能够对已启用列存储索引的数据存储执行变更写入操作,也就是说列存储索引适

SQL Server 2012笔记分享-4:理解SQL server实例

每个单独的SQL server实例都有一个windows进程:sqlservr.exe,一个windows下能安装多个实例,多个实例会有多个sqlservr.exe进程. 一个SQL实例在后台对应一个服务,如果多个应用程序放在一个实例里,如果某个应用开发的程序有问题,比如死循环,会导致服务停止,从而导致所有数据库无法工作.可以采用多实例分开方式. 一个服务器上可以装多个实例,标准版(16个)和企业版(50个)支持的实例数量不同. SQL server实例的类型 (一)默认实例和命名实例 1.服务

SQL Server 2012笔记分享-6:理解内存管理

内存管理 – SQL Server 2005/2008/2008r2 SQL Server 2012以前的版本(SQL 2005/2008/2008R2),有single page allocator 和multi page allocator.也就是说,如果申请的内存是8k以内的,就会有单页分配器分配,而大于8kb的内存请求,使用multi page 分配器来管理.如图所示. 使用select * from sys.dm_os_memory_clerks查询memory clerk,会发现si

SQL Server 2012笔记分享-22:理解备份模式与恢复模式

SQL Server 备份和还原组件为保护存储在 SQL Server 数据库中的关键数据提供了基本安全保障. 为了最大限度地降低灾难性数据丢失的风险,您需要定期备份数据库以保留对数据所做的修改. 规划良好的备份和还原策略有助于防止SQL Server 2012笔记分享-22:理解备份模式与恢复模式数据库因各种故障而造成数据丢失. 通过还原一组备份,然后恢复数据库来测试您的策略,以便为有效地应对灾难做好准备. ===========================================

SQL Server 2012笔记分享-8:理解包含数据库

包含数据库的四大核心特点 独立于其他数据库以及独立于承载数据库的 SQL Server 实例的一种数据库. 很多用于描述数据库的元数据都在该数据库中维护. 使用相同的排序规则定义所有元数据. 数据库可执行用户身份验证,因此减少了对 SQL Server 实例的登录名的数据库依赖关系. 包含数据库解决的问题 在你将SQL Server 2012包含数据库隔离之后,你就可以轻易将其从一个SQL Server实例迁移至另一个SQL Server实例,而不必迁移一组SQL Server登录.此包含数据库

SQL Server 2012笔记分享-51:理解系统数据库恢复

下图是一个很重要的表格,详细描述了系统数据库的备份需求,支持的恢复模式和还原的选项. master数据库:需要备份,需要在单用户模式下恢复 model数据库:需要备份,恢复数据库的方式为T3608 trace flag msdb数据库:需要备份,恢复模式默认为简单,恢复数据库的方式和恢复普通数据库一样,没有特殊要求 tempdb数据库:不需要备份,因为在实例启动的时候tempdb会重建:     详细的步骤可以参考 http://msdn.microsoft.com/zh-cn/library/

SQL Server 2012笔记分享-46:如何快速学习T-SQL语句

对于初学者来说,T-SQL语句的编写一直是个难题,初学者还是习惯使用图形界面来做相关的SQL方面的维护工作.但是在一个稍微复杂大型的SQL场景中,如果我们能够快速的掌握和理解SQL语句的编写和使用,那么会使我们的运维工作达到事半功倍的效果. 其实对于SQL server 2012来说,本身就提供了很多途径来帮助初学者获取日常管理任务的对应T-SQL脚本.下面我们来举几个快速获取T-SQL脚本的例子. ================================================

SQL Server 2012笔记分享-48:备份时间线

备份时间线是SQL server 2012数据库恢复顾问页面中的一项重要新功能,可以让我们更方便的基于备份时间点进行数据库的恢复. 在SQL server 2012的还原数据库界面,可以找到时间线,如图. 点开时间线时候,我们可以选择还原上次所做的备份,当备份时间线的间隔选择周的时候,我们在下方的时间轴上就可以看到一周之内所有可供还原的备份. 备注:因为下图中选择了还原到上次所做的备份,所以只显示了最近一次的完整备份,如图介于7月2和7月3之间. 我们还可以选择特定的日期和时间,在时间线间隔里面