如何在不影响性能的情况下备份大型 SQL Server 数据库?

Rac*_*hel 19 sql-server-2005 sql-server backup

我们收到了有关查询运行缓慢或在清晨超时的报告,我看到的唯一一项我认为可能会影响它的作业是我们的数据库备份作业。

数据库本身大约有 300GB,备份工作从凌晨 4:30 开始,直到早上 7:00 之后才完成。我们备份作业的当前语法是:

BACKUP DATABASE [DatabaseName]
TO DISK = N'E:\Database Backups\DatabaseName.Bak'
WITH INIT, NOUNLOAD, NAME = N'DatabaseName.Bak',
NOSKIP, STATS = 10, NOFORMAT
Run Code Online (Sandbox Code Playgroud)

E:\ 是服务器上的一个分区,其中包含数据库和数据库备份。

还应该注意的是,这是一个虚拟服务器,而不是专用的独立服务器。在我们切换到虚拟服务器后,我们开始收到关于备份过程中速度变慢的抱怨,所以我认为这可能是相关的。

有没有办法运行此备份作业,使其在运行时不影响查询性能?

我们使用的是 SQL Server 2005

Aar*_*and 22

  1. 将备份 I/O 与系统上的其余 I/O 隔离。虽然可能需要更长的时间并且更容易出现问题,但通过网络而不是本地磁盘进行备份可能有助于减轻对实例的直接影响。即使在虚拟机中,您也应该能够公开其他存储,以便 SQL Server 可以写入不同的 I/O 子系统。
  2. 不太可能有任何区别,但是,如果这是从工作中运行的,为什么需要使用该STATS选项?您确定需要其他选项 ( NOUNLOAD, NOSKIP, NOFORMAT) 吗?我没有对整个选项矩阵进行任何广泛的性能测试,但恕我直言,您应该只使用您知道需要的选项。
  3. 在不干扰常规用户活动的不同时间运行完整备份。这并不总是可能的,但即使在 24/7 操作中,也有高峰和低谷时间。
  4. 如果您迁移到 2008+,您可以利用备份压缩(2008 上的企业版,2008 R2+ 中的标准版或企业版)。如果您不能移动到 2008 或没有足够的版本,有 3rd 方备份工具可以为您进行压缩,而且它们都非常擅长。自 2008 年以来,我已经能够使用原生压缩,而且我对速度和压缩百分比都非常满意,无需进一步投资 3rd 方。但是在 2005 年,我记得Red-Gate SQL Backup取得了不错的成功;Quest LiteSpeed也相当不错,但我不知道自从被戴尔收购后,它在投入什么样的努力。
  5. 如果您的数据库处于完全恢复状态,您可以在完全备份之间间隔更长的时间,以此换取如果您必须恢复到某个时间点的知识,您可能会有更多的日志需要恢复。您可以将此选项与以下 Ali 的建议相结合,即在整个星期内进行差异处理 - 如果您必须在星期四恢复,则需要恢复 1 个完整的、1 个差异以及差异后的日志。
  6. 如果您有大量陈旧且不变的数据,您可以考虑将它们托管在具有不同恢复计划的不同数据库中,或者至少托管在不同的文件组中,并以这种方式拆分备份操作。如果您有可以设为只读的参考或存档数据,并且您正在进行简单恢复,则可以将其移动到自己的只读文件组中,备份一次,而不必将其包含在每晚备份中以后再。请参阅这些 MSDN 主题:

执行零碎恢复

示例:仅对某些文件组进行分段还原(简单恢复模型)

  • 不,我的意思是备份到任何其他 I/O 子系统*除了*您还同时为常规数据库和 tempdb 活动执行读取和写入的磁盘。这可能是同一台服务器上的不同磁盘驱动器、另一台机器上的共享、SAN 上的不同 LUN、NAS 上的共享等。 (3认同)

Ali*_*ghi 8

这是一个常见问题,有多种解决方案,实际上取决于您的环境。让我们来看看它们:

1- 即时备份压缩

2008 年 R1 备份压缩在企业版中可用,在 2008R2 中它在标准版中可用。这是巨大的。它会为您节省很多时间。如果你可以升级就去吧。如果不能,请查看RedGate 的 HyperBak实用程序或Quest LiteSpeed。两者都有免费试用。

2- 完整和差异备份

我继承了一个 2TB 的产品数据库,导致我制定的 24/7 主要互联网公司出现很多超时。我们启用了完整备份和差异备份,这为我们节省了大量时间。我会在周日中午 12:00 活动低时进行完整备份,并在一周内进行差异化。这节省了很多空间。Diff 的工作与事务日志不同,因为它们处理更改的数据库页面。备份任何更改的页面。因此,您进行完整还原,然后进行差异还原以添加修改后的页面。

3- 你的瓶颈是什么?

瓶颈分析对于诊断很重要。您是否备份到与数据文件相同的磁盘阵列?您的数据文件是否被挂钩?备份期间数据磁盘的 DISK SEC/READ 和 DISK SEC/WRITE 是多少?我修改了备份以创建 4 个文件。每个文件都有自己的线程编写器,并且在我们的 SAN 中效果很好。测试一下,我只创建了 4 个备份文件就节省了 45 分钟。只要确保上面列出的磁盘指标很低。获得基线。

4- 复制到不同的服务器并备份

这个稍微高级一点。您必须确保复制的数据库是最新的,并且需要对此进行适当的监控。如果是这样,您可以只备份复制的数据库。