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


18

我们已经收到有关查询运行缓慢或凌晨超时的报告,而我认为运行可能会影响到此的唯一工作就是数据库备份工作。

数据库本身约为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

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

还应该注意,这是虚拟服务器,而不是专用的独立服务器。切换到虚拟服务器后,我们立即开始抱怨备份过程中的速度降低,因此我认为这可能与之相关。

有没有一种方法可以运行此备份作业,使其在运行时不影响查询性能?

我们正在使用SQL Server 2005

Answers:


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

进行零碎还原

示例:仅部分文件组的逐项还原(简单恢复模型)


您能否为我指明正确的方向,以学习更多有关将备份I / O与系统中其余I / O隔离的信息?#3(更改备份时间)是不可选择的,因为凌晨4:30是运行备份的最佳时间,我们已经讨论了升级到2008(#4)的问题,但是我认为这不会发生任何时候。
雷切尔

不确定如何将您指向正确的方向-您可以将其他存储暴露给虚拟机吗?
亚伦·伯特兰

是的,我认为我们可以将其他存储公开给虚拟机。当您说“将备份I / O与系统中其余I / O隔离”时,是指备份到网络驱动器而不是磁盘驱动器吗?
雷切尔

3
不,我的意思是备份到磁盘以外其他任何I / O子系统,该磁盘上您还同时对常规数据库和tempdb活动执行读写操作。这可能是同一台服务器上的其他磁盘驱动器,另一台计算机上的共享,SAN上的其他LUN,NAS上的共享等
Aaron Bertrand

I零碎还原是我没想到的绝佳解决方案,感谢您发布!
阿里·拉泽吉

8

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

1-即时备份压缩

在2008年R1中,Backup Compression在Enterprise中可用,在2008R2中,它在Standard中可用。这是巨大的。这将为您节省大量时间。如果可以升级,那就去吧。如果不能,请查看RedGate的HyperBak实用程序或Quest LiteSpeed。两者都有免费试用版。

2-完整和差异备份

我继承了2TB产品数据库,导致我工作的24/7大型互联网公司超时。我们启用了完整备份和差异备份,从而节省了很多时间。如果活动量少,我将在周日12:00 am进行完整备份,并在一周中进行比较。这样节省了很多空间。Diff的工作不同于事务日志,因为它们在更改了哪些数据库页面上起作用。备份任何更改的页面。因此,您要执行完全还原,然后进行差异还原以添加修改后的页面。

3-您的瓶颈是什么?

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

4-复制到其他服务器并备份

这一点有点先进。您必须确保复制的数据库是最新的,并且需要对此进行适当的监视。如果是这样,您可以仅备份复制的数据库。


只是对HyperBak的了解,当我在2011年末测试它时,就没有让VLDB受益。我认为300GB不会被认为是VLDB,但是请注意它是否不能按预期运行。
Ali Razeghi 2012年

-1

您可以使用以下参数:

BLOCKSIZE-选择大小512、1024、2048、4096、8192、16384、32768、65536(以KB为单位)

BUFFERCOUNT-指定要用于备份操作的I / O缓冲区的总数。您可以指定任何正整数;但是,由于Sqlservr.exe进程中的虚拟地址空间不足,大量的缓冲区可能会导致“内存不足”错误。-来自MSDN

MAXTRNASFERSIZE-从65536字节(64 KB)到4194304字节(4 MB)


-3

尝试一下。它解决了超时过期问题,而大型数据库。

Private Sub Command1_Click()
On Error Resume Next
Dim con As New Connection
Dim tm As String
con.CommandTimeout = 500'''Command timeout should be 500


 With con
    .ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=dbiBMS;Data Source=192.168.103.4"
    .Open
 End With
 tm = CStr(Time)

con.Execute " backup database dbiBMS to disk='E:\Database_Backup\Test1.bak' with format "

con.Close
MsgBox tm
Exit Sub
x:
MsgBox Err.Description

End Sub

3
我认为将超时设置为500ms不会解决超时过期问题。
vijayp,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.