备份压缩 (SQL Server)

适用范围:SQL Server

本文介绍 SQL Server 备份的压缩,包括限制、压缩备份时的性能平衡、备份压缩的配置以及压缩率。 以下 SQL Server 版本支持备份压缩:企业版、标准版和开发人员版。 SQL Server 2008 (10.0.x) 的每个版本和更高版本都可以还原已压缩的备份。

优点

  • 因为相同数据的压缩的备份比未压缩备份小,所以压缩备份所需的设备 I/O 通常较少,因此通常可大大提高备份速度。

    有关详细信息,请参阅本主题后面的压缩备份的性能影响

限制

压缩的备份具有以下限制条件:

  • 压缩和未压缩的备份无法在媒体集中共存。

  • 以前版本的 SQL Server 无法读取压缩备份。

  • NTbackup 无法与压缩的 SQL Server 备份共享磁带。

SQL Server 2025 中引入的 ZSTD 压缩算法

从 SQL Server 2025 (17.x) 预览版开始,新的压缩算法 ZSTD 可用于备份压缩。 此算法比以前的MS_XPRESS算法更快、更高效。

可通过以下方法之一使用 ZSTD 算法进行备份压缩:

  • 通过在 BACKUP Transact-SQL 命令中指定WITH COMPRESSION (ALGORITHM = ZSTD)选项以进行特定备份
  • 通过将 备份压缩算法服务器配置选项 设置为 3。 对于使用该WITH COMPRESSION选项的所有备份,此选项将默认备份压缩算法设置为 ZSTD。

注释

ZSTD 算法目前为预览版,仅在 SQL Server 2025 (17.x) 预览版中可用。

压缩备份的性能影响

默认情况下,压缩会显著增加 CPU 的使用,并且压缩进程所消耗的额外 CPU 可能会对并发操作产生不利影响。 因此,你可能需要在会话中创建低优先级的压缩备份,其 CPU 使用率受 资源调控器限制。 有关详细信息,请参阅本主题后面的 使用资源调控器限制备份压缩的 CPU 使用量 (Transact-SQL)限制。

从 SQL Server 2022 (16.x),可以使用集成卸载和加速来压缩备份并卸载备份的 CPU 资源。

若要很好地了解备份 I/O 的性能表现,可以通过评估以下类型的性能计数器来分别考察进入设备或来自设备的备份 I/O:

有关 Windows 计数器的信息,请参阅 Windows 帮助。 有关如何使用 SQL Server 计数器的信息,请参阅 使用 SQL Server 对象

计算压缩备份的压缩率

若要计算备份的压缩率,请使用 backupset 历史记录表的 backup_size 列和 compressed_backup_size 列中有关此备份的值,如下所示:

backup_sizecompressed_backup_size

例如,3:1 的压缩率指示你在磁盘空间上节省大约 66%。 若要查询这些列,可以使用以下 Transact-SQL 语句:

SELECT backup_size/compressed_backup_size FROM msdb..backupset;  

压缩备份的压缩率取决于所压缩的数据。 有多种因素会影响所获得的压缩率。 主要因素包括:

  • 数据类型。

    字符数据的压缩率要高于其他类型的数据。

  • 页面上各行间数据的一致性。

    通常,如果某页包含多个行,而其中的某个字段包含相同的值,则该值可获得较大的压缩。 相反,对于包含随机数据或者每页只有一个很大的行的数据库,压缩备份的大小几乎与未压缩的备份相同。

  • 数据是否加密

    与未加密数据相比,同样的加密数据的压缩率要小得多。 例如,如果使用 Always Encrypted 或其他应用程序级别的加密在列级别上对数据进行加密,则压缩备份后大小可能变化不大。

    要详细了解如何压缩使用透明数据加密 (TDE) 进行加密的数据库,请参阅压缩使用 TDE 的备份

  • 数据库是否压缩。

    如果压缩数据库,则压缩备份不会将大小减小很多,甚至根本不会减小。

压缩使用 TDE 的备份

从 SQL Server 2016 (13.x) 开始,MAXTRANSFERSIZE 的设置 透明数据加密 (TDE) 加密数据库启用优化的压缩算法,该算法先解密页面,然后将其压缩并再次对其进行加密。 如果未指定 MAXTRANSFERSIZE,或者使用了 MAXTRANSFERSIZE = 65536(64 KB),那么对使用 TDE 加密的数据库进行备份压缩时会直接压缩加密页,并且可能不会产生良好的压缩率。 有关详细信息,请参阅支持 TDE 的数据库的备份压缩

从 SQL Server 2019 (15.x) CU5 开始,不再需要 MAXTRANSFERSIZE 设置来对 TDE 启用此优化的压缩算法。 如果备份命令指定 WITH COMPRESSION,或者将备份压缩默认服务器配置设置为 1,则 MAXTRANSFERSIZE 将自动增加到 128K 以启用优化算法。 如果在 MAXTRANSFERSIZE 备份命令上指定了值 > 64K,则遵从所提供的值。 换句话说,SQL Server 绝不会自动减小该值,只会增加它。 如果需要使用 MAXTRANSFERSIZE = 65536 备份 TDE 加密的数据库,则必须指定 WITH NO_COMPRESSION,或者确保将备份压缩默认服务器配置设置为 0。

有关详细信息,请参阅 BACKUP (Transact-SQL)

为备份文件分配空间

对于压缩的备份,最终备份文件的大小取决于数据可压缩程度,这在备份操作完成之前是未知的。 因此,默认情况下,使用压缩备份数据库时,数据库引擎使用备份文件的预分配算法。 此算法为备份文件预先分配数据库大小的一个预定义百分比。 如果在备份操作过程中需要更多空间,则数据库引擎会增大该文件。 如果最终大小小于分配的空间,则在备份操作结束时,数据库引擎会将该文件收缩到备份的实际的最终大小。

若要允许备份文件仅在需要时增大以便达到其最终大小,则使用跟踪标志 3042。 跟踪标志 3042 会导致备份操作绕过默认的备份压缩预分配算法。 如果您需要仅分配压缩的备份所需的实际大小以便节约空间,则此跟踪标志将很有用。 但是,使用此跟踪标志可能会导致轻微的性能损失(在备份操作期间损失可能会增加)。

相关任务

后续步骤

备份概述 (SQL Server)
跟踪标志 (Transact-SQL)