本主题介绍 SQL Server 备份的压缩,包括限制、压缩备份的性能权衡、备份压缩的配置以及压缩比率。
注释
有关 SQL Server 2014 支持备份压缩的版本的信息,请参阅 SQL Server 2014 各版本支持的功能。 每个版本的 SQL Server 2008 及更高版本都可以还原压缩的备份。
优点
由于压缩备份小于相同数据的未压缩备份,因此压缩备份通常需要更少的设备 I/O,因此通常会显著提高备份速度。
有关详细信息,请参阅本主题后面的 压缩备份的性能影响。
限制
以下限制适用于压缩备份:
压缩和未压缩的备份不能共存于介质集中。
以前版本的 SQL Server 无法读取压缩备份。
NTbackup 无法与压缩的 SQL Server 备份共享磁带。
压缩备份的性能影响
默认情况下,压缩会显著增加 CPU 使用率,压缩过程消耗的额外 CPU 可能会对并发操作产生不利影响。 因此,你可能希望在 CPU 使用率受资源调控器限制的会话中创建低优先级压缩备份。 有关详细信息,请参阅 使用资源调控器通过备份压缩(Transact-SQL)限制 CPU 使用率。
若要很好地了解备份 I/O 性能,可以通过评估以下性能计数器,将备份 I/O 隔离到设备或从设备隔离:
Windows I/O 性能计数器,例如物理磁盘计数器
SQLServer:Backup Device 对象的 Device Throughput Bytes/sec 计数器
SQLServer:Databases 对象的备份/还原吞吐量/秒计数器
有关 Windows 计数器的信息,请参阅 Windows 帮助。 有关如何使用 SQL Server 计数器的信息,请参阅 “使用 SQL Server 对象”。
计算压缩备份的压缩比率
若要计算备份的压缩比率,请使用备份历史记录表中的backup_size和compressed_backup_size列中的值,如下所示:
backup_size:compressed_backup_size
例如,3:1 的压缩率指示你在磁盘空间上节省大约 66%。 若要查询这些列,可以使用以下 Transact-SQL 语句:
SELECT backup_size/compressed_backup_size FROM msdb..backupset;
压缩备份的压缩比率取决于已压缩的数据。 各种因素可能会影响获取的压缩率。 主要因素包括:
数据类型。
字符数据比其他类型数据更容易压缩。
页面上的行之间的数据的一致性。
通常,如果页面包含多个行,其中一个字段包含相同的值,则可能会对该值进行重大压缩。 相比之下,对于包含随机数据或每页仅包含一个大行的数据库,压缩备份几乎与未压缩的备份一样大。
数据是否加密。
加密的数据压缩明显小于等效的未加密数据。 如果使用透明数据加密来加密整个数据库,则压缩备份可能不会降低其大小(如果完全如此)。
是否压缩数据库。
数据库已压缩时,压缩备份可能无法显著减小其大小(如果有的话)。
为备份文件分配空间
对于压缩备份,最终备份文件的大小取决于数据的可压缩程度,在备份作完成之前这是未知的。 因此,默认情况下,使用压缩备份数据库时,数据库引擎使用备份文件的预分配算法。 此算法预先分配数据库大小的一个预定义百分比用于备份文件。 如果在备份作期间需要更多空间,数据库引擎会增大文件。 如果最终大小小于分配的空间,在备份作结束时,数据库引擎会将文件收缩到备份的实际最终大小。
若要仅允许备份文件根据需要增长以达到其最终大小,请使用跟踪标志 3042。 跟踪标志号 3042 会导致备份操作绕过默认的备份压缩预分配算法。 如果您需要仅分配压缩的备份所需的实际大小以便节约空间,则此跟踪标志将很有用。 但是,使用此跟踪标志可能会导致轻微的性能损失(备份作持续时间可能增加)。