优化 SQL Server 中的备份和还原性能

Microsoft SQL Server 提供了以下两种加速备份和还原操作的方式:

  • 使用多个备份设备使得可以将备份并行写入所有设备。备份设备的速度是备份吞吐量的一个潜在瓶颈。使用多个设备可以按使用的设备数成比例提高吞吐量。同样,可以将备份并行从多个设备还原。有关详细信息,请参阅本主题后面的“使用多个介质或设备”。

  • 结合使用完整备份、差异备份(对于完整恢复模式或大容量日志恢复模式)以及事务日志备份可以最大程度地缩短恢复时间。创建差异数据库备份通常比创建完整数据库备份快,并减少了恢复数据库所需的事务日志量。有关详细信息,请参阅创建 SQL Server 数据库的完整备份和差异备份

使用多个介质或设备

通过读取器/写入器线程将数据和事务日志从备份设备复制到数据库和事务日志文件;给每个备份设备指派一个线程。性能受备份设备传送数据的能力或数据库和事务日志文件接收数据的能力的限制。因此,性能随备份设备数量的增加而提升,直到达到数据库或事务日志文件接收数据的最大吞吐量。

使用多个备份设备进行备份和还原操作,SQL Server 可以使用并行 I/O 来提高备份和还原操作的速度,因为每个备份设备都可以与其他备份设备同时执行写操作或读操作。对于具有大型数据库的企业,使用多个备份设备可以明显减少执行备份和还原操作所花的时间。SQL Server 最多支持 64 个备份设备同时执行一个备份操作。

当一个备份写入多个备份设备时,会出现几个内部同步点。最重要的同步点在已备份完数据库内的所有数据且即将开始备份事务日志时出现。

重要说明重要提示

使用多个备份设备执行备份操作时,所用的备份介质只能用于 SQL Server 备份操作。有关详细信息,请参阅使用备份媒体

使用多个备份设备创建和还原备份与使用单个设备创建和还原备份相同。唯一的区别是使用多个备份设备时,必须指定操作中用到的所有备份设备,而不是仅指定一个。例如,如果使用三个磁带备份设备(如 \\.\TAPE0、\\.\TAPE1 和 \\.\TAPE2)创建数据库备份,则必须将每个磁带设备指定为备份操作的一部分,尽管以后还原和备份时很少会用到这些磁带备份设备。

使用可移动介质在多个备份设备上创建备份时,这些设备可以以不同的速度运行,介质卷的可用空间也可以有所不同。在备份操作过程中,如果备份设备上介质卷的空间已用完,此操作将停止对该设备执行写操作并提示您更换新的介质卷。该设备将处于阻塞状态,直到您使用空卷替换空间已满的介质卷。与此同时,备份操作继续向其介质仍具有可用空间的设备写入数据。替换空间已满的介质卷后,该设备将变为可用,备份继续向该设备写入数据。但是,请注意,如果在任何设备阻塞时出现内部同步点,整个备份操作将暂停,直到该设备再次可用。

示例

请考虑使用三个相同速度的磁带备份设备存储完整数据库备份的方案。前两个磁带有 10 GB 的可用空间,而第三个磁带只有 5 GB 的可用空间。如果将 20 GB 的数据库同时备份到这三个磁带备份设备上,第三个磁带将在备份完成之前填满。5 GB 的数据写入第三个磁带后,备份操作将立即停止对第三个设备执行写操作。备份操作将阻塞该设备,并提示您更换新的磁带。与此同时,备份操作继续向另两个设备写入数据。但是,在更换第三个磁带之前,会出现内部同步点。此时,整个备份操作将暂停,直到第三个设备中装入了新磁带。

优化完整备份和差异备份的性能

创建完整备份或差异备份包含以下步骤:

  1. 将数据库文件中的数据复制到备份设备。

  2. 复制事务日志中用于将数据库前滚到与相同的备份设备状态一致的那部分。

创建差异备份与创建完整备份相同,不过创建差异备份仅复制更改的数据。备份数据库文件只需把文件中的数据复制到备份设备。

用于存储数据库的数据库文件按磁盘设备排序,并给每个设备指派读取器线程。该读取器线程从数据库文件中读取数据。给每个备份设备指派写入器线程。写入器线程将数据写入备份设备。通过在更多的逻辑驱动器中分布数据库文件可以增加并行读取操作。同样,通过使用更多的备份设备可以增加并行写操作。

一般情况下,瓶颈要么是数据库文件,要么是备份设备。如果读取吞吐总量比备份设备吞吐总量大,则瓶颈在备份设备这一侧。添加更多的备份设备(如果必要还添加 SCSI 控制器)可以提高性能。但是,如果备份吞吐总量比读取吞吐总量大,则应通过添加更多数据库文件或设备(或通过添加更多磁盘到 RAID 设备)以增加读取吞吐量。

优化事务日志备份性能

创建事务日志备份只需将日志中尚未备份的部分复制到备份设备。虽然可能有多个事务日志文件,但事务日志在逻辑上是某个线程按顺序读取的一个流。

给每个备份设备指派写入器线程。通过添加更多的备份设备可以获得更高的性能。

瓶颈既可能是包含事务日志文件的磁盘设备也可能是备份设备,这取决于它们的相对速度和所使用备份设备的数量。添加更多备份设备可以使性能呈线性增长,直到达到包含事务日志文件的磁盘设备的最大容量,此后只有提高包含事务日志的磁盘设备的速度(例如,使用磁盘条带化),才能得到更多的性能收益。

优化还原性能

还原数据库备份或差异备份包括四个步骤:

  1. 创建数据库和事务日志文件(如果它们不存在)。

  2. 将数据从备份设备复制到数据库文件。

  3. 从事务日志文件复制事务日志。

  4. 前滚事务日志,然后(如果需要)重新启动恢复。

应用事务日志备份包括两个步骤:

  1. 将数据从备份设备复制到事务日志文件。

  2. 前滚事务日志。

还原数据库文件包括两个步骤:

  1. 创建所有丢失的数据库文件。

  2. 将数据从备份设备复制到数据库文件。

文件初始化

如果数据库和事务日志文件还不存在,必须先创建它们才能将数据还原到其中。创建数据库和事务日志文件并将文件内容初始化为零。单独的工作线程并行创建和初始化文件。按磁盘设备排序数据库和事务日志文件,并给每个磁盘设备指派单独的工作线程。创建和初始化文件需要很大的吞吐量,因此在可用的逻辑驱动器中均匀分布文件能产生最佳性能。

即时文件初始化

在 SQL Server 2005 及更高版本中,可以即时初始化数据文件,因而可以快速执行数据库或文件组还原操作。即时文件初始化功能将收回使用的磁盘空间,不会使用零填充。而是,新数据写入文件时覆盖磁盘内容。日志文件初始化仍需要零位调整,但此操作将与从备份传输数据并行进行。传输所有数据并初始化整个日志之前,不能开始还原的前滚步骤。

注意注意

只有在 Microsoft Windows XP、Windows Server 2003 或更高的系统中才可以使用即时文件初始化功能。

若要使用即时文件初始化,必须在 Windows 帐户下运行 MSSQLSERVER 服务帐户并为该 Windows 帐户分配 Windows SE_MANAGE_VOLUME_NAME 特权。此权限默认情况下分配给 Windows 管理员组。如果拥有系统管理员权限,您可以通过将 Windows 帐户添加到“执行卷维护任务”安全策略来分配此权限。有关分配用户权限的详细信息,请参阅 Windows 文档。

优化磁带备份设备性能

有多个变量影响磁带备份设备的性能,并使 SQL Server 备份和还原性能操作随磁带设备的添加大致呈线性增长:

  • 软件数据块大小。

  • 共享一个小型计算机系统接口 (SCSI) 总线的磁带设备数。

  • 磁带设备类型。

软件数据块大小是由 SQL Server 为最佳性能计算的,不应更改。最大 BLOCKSIZE 为 64 KB。

许多高速磁带机如果对每个所使用的磁带机有专用 SCSI 总线,将运行得更好。本机传输速率超过 SCSI 总线速度的 50% 的驱动器必须在专用 SCSI 总线上,以避免降低性能。有关影响磁带机性能的设置的更多信息,请参阅磁带机供应商文档。

重要说明重要提示

永远不要将磁带机与磁盘或 CD-ROM 驱动器放置在同一个 SCSI 总线上。对这些设备的错误处理操作互不兼容。

对已加载的磁带执行多个备份操作时,可以通过指定 NOREWIND 来提高性能。此选项导致 SQL Server 在完成备份操作后使磁带保持打开状态。NOREWIND 意即 NOUNLOAD。

优化磁盘备份设备性能

磁盘备份设备的原始 I/O 速度影响磁盘备份设备性能,并使 SQL Server 备份和还原性能操作随磁盘设备的添加大致呈线性增长:

对磁盘备份设备使用 RAID 时需认真考虑。例如,RAID 5 的写入性能低,大致与单个磁盘的速度相同(由于必须维护奇偶信息)。另外,将数据追加到文件的原始速度明显比原始设备写入速度慢。

如果将备份设备高度条带化,以便使对备份设备的最大写入速度远远超过备份设备将数据追加到文件的速度,则在相同的条带集上放置几个逻辑备份设备会比较合适。换句话说,可以通过在相同的逻辑驱动器上放置几个备份介质家族来提高备份性能。然而,需要采用经验方法确定这对每个环境是收益还是损失。通常情况下,最好将每个备份设备放置在单独的磁盘设备上。

一般在 SCSI 总线上只有少数几个磁盘可以最大速度运行,但 Ultra-wide 和 Ultra-2 总线可以处理更多磁盘。不过,很可能需要认真配置硬件以获得最佳性能。

有关影响磁盘性能的设置的更多信息,请参阅磁盘供应商文档。

数据压缩

如今的磁带机有内置的硬件数据压缩,可显著提高将数据传送到驱动器的有效传送速率。数据库内实数据的可压缩性取决于数据本身和所使用的磁带机。对于大范围的数据库,典型的数据压缩率是从 1.2:1 到 2:1。该压缩率对于在多种业务应用程序中使用的数据是典型的,但有些数据库可能有更高或更低的压缩率。例如,主要包含已压缩图像的数据库将不能再由磁带机进一步压缩。有关数据压缩的更多信息,请参阅磁带机供应商文档。

默认情况下,SQL Server 支持硬件压缩,但可以使用 3205 跟踪标志禁用硬件压缩。在极少数情况下,禁用硬件压缩可以提高备份性能。例如,如果数据已经完全压缩,禁用硬件压缩可防止磁带机浪费时间试图进一步压缩数据。

有关跟踪标志的详细信息,请参阅跟踪标志 (Transact-SQL)

备份压缩

默认情况下,使用备份压缩进行备份会显著增加 CPU 使用率,并且压缩进程占用的额外 CPU 可能会对并发操作造成不利影响。因此,您可能需要在会话中创建低优先级的压缩备份,当发生 CPU 争用时,此备份的 CPU 使用率受资源调控器限制。有关详细信息,请参阅如何使用资源调控器限制备份压缩的 CPU 使用量 (Transact-SQL)

传送到磁带的数据量

创建数据或差异备份只捕获数据库中包含实际数据的部分,而不备份未使用的空间。其结果将使备份操作的速度更快。

虽然您可以根据需要将 SQL Server 数据库配置为自动增长,但是也可以继续保留数据库内的空间以保证它可用。保留数据库内的空间对备份吞吐量和备份数据库所需的总时间没有负面影响。

优化日志传送同步

尝试同步日志传送目标时,不必在 RESTORE LOG 步骤之间使用 WITH STANDBY。