我有一份工作,每晚运行所有附加数据库的备份,但是如果有人在此期间连接,它可能会拖慢服务器。我有大量的 CPU 开销需要处理(我的使用率刚刚超过 5%,总共 8 个核心,最高的可能是 30%,其余的处于空闲状态),我的问题是我正在限制我的 I/O。查看资源监视器时,我注意到资源监视器中对 mdf 和 .bak 文件的读取的 I/O 优先级为Normal
。
有没有办法让我的备份Background
优先运行?
答案1
您可以将数据库备份到 UNC 路径(手动或通过创建备份设备),这样您可以尝试这样做,但您将用磁盘 I/O 来交换网络 I/O。
答案2
这实际上并没有回答问题(如何调整备份操作的 I/O 优先级),但可能有助于显著加快备份速度并减少其对其他活动的影响:
如果您可以将备份写入未保存数据库数据和日志文件的驱动器,则使用基于旋转磁盘的驱动器可以显著提高性能,因为备份操作不会导致磁头在保存实时数据的区域(读取页面)和正在写入备份的区域(存储这些页面)之间不断翻转。
这可能意味着在机器上添加一个额外的物理驱动器(或多个驱动器,以便您可以使用 RAID 实现冗余)来存储备份,特别是当您只有一个驱动器或阵列来存储所有内容时。如果您的数据和日志文件位于不同的磁盘/阵列上,但没有第三个驱动器/阵列来写入备份,并且无法添加,则将备份写入包含日志的驱动器通常比将其写入包含数据文件的驱动器更快(因为日志文件中的活动页面要少得多,除非在特殊情况下)。
答案3
不,不支持将一个线程更改为不同的优先级。您可以尝试使用 LiteSpeed 和/或 HyperBac 之类的工具来压缩备份,这将减少写入 IO 要求。
答案4
升级到 SQL Server 2008 Enterprise 或 SQL Server 2008 R2 Standard 或更高版本,利用本机备份压缩 - 并交换一些 CPU 周期以潜在地大大减少备份时间。