备份压缩 (SQL Server)
本主题讨论备份压缩的基础知识,包括压缩备份时的性能权衡。
SQL Server 2008 Enterprise 中引入了备份压缩。从 SQL Server 2008 R2 开始,SQL Server 2008 R2 Standard 和所有更高版本都支持备份压缩。SQL Server 2008 的每个版本和更高版本都可以还原已压缩的备份。
限制
压缩的备份具有以下限制条件:
压缩的备份和未压缩的备份不能共存于一个介质集中。
早期版本的 SQL Server 无法读取压缩的备份。
NTbackup 无法共享包含压缩的 SQL Server 备份的磁带。
压缩备份的性能影响
因为相同数据的压缩的备份比未压缩备份小,所以压缩备份所需的设备 I/O 通常较少,因此通常可大大提高备份速度。
默认情况下,压缩会显著增加 CPU 的使用,并且压缩进程所消耗的额外 CPU 可能会对并发操作产生不利影响。因此,您可能需要在会话中创建低优先级的压缩备份,其 CPU 使用率受资源调控器限制。有关详细信息,请参阅如何使用资源调控器限制备份压缩的 CPU 使用量 (Transact-SQL)。
若要很好地了解备份 I/O 的性能表现,可以通过评估以下类型的性能计数器来分别考察进入设备或来自设备的备份 I/O:
Windows I/O 性能计数器,例如物理磁盘计数器
SQLServer:Backup Device 对象的 Device Throughput Bytes/sec 计数器
SQLServer:Databases 对象的 Backup/Restore Throughput/sec 计数器
有关 Windows 计数器的信息,请参阅 Windows 帮助。有关如何使用 SQL Server 计数器的信息,请参阅使用 SQL Server 对象。
配置
安装时,默认情况下关闭了备份压缩。备份压缩的默认行为是由备份压缩默认选项服务器级配置选项定义的。您可以在创建单个备份或计划一系列例行备份时覆盖服务器级默认设置。
更改服务器级默认设置
Transact-SQL
使用 sp_configure 存储过程设置备份压缩默认设置的值,然后执行 RECONFIGURE 语句。
SQL Server Management Studio
使用**“服务器属性”对话框的“数据库设置”**页。有关详细信息,请参阅如何查看或更改备份压缩默认选项 (SQL Server Management Studio)。
覆盖备份压缩默认设置
您可以更改单个备份、备份作业或日志传送配置的备份压缩行为。
Transact-SQL
对于给定备份,可以在 BACKUP 语句中使用 WITH NO_COMPRESSION 或 WITH COMPRESSION。
对于日志传送配置,可以使用 sp_add_log_shipping_primary_databasesp_change_log_shipping_primary_database (Transact-SQL) 控制日志备份的备份压缩行为。
SQL Server Management Studio
您可以通过在以下任意对话框中指定**“压缩备份”或“不压缩备份”**来覆盖服务器备份压缩默认设置:
-
备份数据库时,可以控制单个数据库、文件或日志备份的备份压缩。
-
通过维护计划向导,您可以控制所计划的每组类型为完全或差异的数据库备份或日志备份的备份压缩。
SQL Server 2008 Integration Services (SSIS) 备份数据库任务
您可以在创建用于备份单个数据库或多个数据库的包时控制备份压缩行为。
-
您可以控制日志备份的备份压缩行为。
-
压缩率
若要计算备份的压缩率,请使用 backupset 历史记录表的 backup_size 列和 compressed_backup_size 列中有关此备份的值,如下所示:
backup_size:compressed_backup_size
例如,3:1 的压缩率表明您可以节省大约 66% 的磁盘空间。若要查询这些列,可以使用以下 Transact-SQL 语句:
SELECT backup_size/compressed_backup_size FROM msdb..backupset;
压缩备份的压缩率取决于所压缩的数据。有多种因素会影响所获得的压缩率。主要因素包括:
数据类型。
字符数据的压缩率要高于其他类型的数据。
页面上各行间数据的一致性。
通常,如果某页包含多个行,而其中的某个字段包含相同的值,则该值可获得较大的压缩。相反,对于包含随机数据或者每页只有一个很大的行的数据库,压缩备份的大小几乎与未压缩的备份相同。
数据是否加密。
与同样的未加密数据相比,加密数据的压缩程度要小很多。如果使用透明数据加密来加密整个数据库,则压缩备份不会将数据库大小减小很多,甚至根本不会减小。
数据库是否压缩。
如果压缩数据库,则压缩备份不会将大小减小很多,甚至根本不会减小。