SQL Server如何提高数据库备份的速度

对于一个数据库完整备份来说,备份的速度很大程度上取决于下面两个因素:读磁盘数据、日志文件的吞吐量,写磁盘数据文件的吞吐量。

下图是备份过程中磁盘的变化情况:

读吞吐量

读吞吐量的大小取决于磁盘读取数据的速度,而磁盘读取的速度又取决于数据文件在磁盘中的位置。因此,位于不同盘符上不同数据库文件的读取速度都不相同。

测量读吞吐量的一个方法就是进行一次数据库完整备份,然后使用Windows性能监控器(perfmon)来监控数据库文件所在磁盘的Read bytes/sec 性能计数器。保存备份文件的磁盘应该在物理上区别于数据库文件所在的磁盘,否则测量精度会不准确。当然备份同时也应该会有另外一些来自系统或是其他应用程序对磁盘的读取操作。

注意:如果你使用完整备份来监测磁盘读写吞吐量的话,那么这个测试用的备份文件应该和其他常规备份放在一起,以便恢复时使用。也就是说,如果你在测试备份文件之后又进行了常规差异备份,那么这些差异备份就会以这个测试备份为还原的起始点。

假设数据库所有文件的大小都是相等的,那么你获取的最小测量值就是你指定数据库在系统中最大的备份吞吐量了。

另一个测量读吞吐量的方法是在NUL设备上执行备份,如下:

BACKUP DATABASE AdventureWorks TO DISK = ‘NUL‘ WITH COPY_ONLY

注意我们使用了COPY_ONLY选项,这个选项仅仅在SQL Server 2005及以上版本中才提供。你可以在SQL Server2000上执行相同的备份,只是要忽略这个选项,但是一定要小心。因为备份到NUL设备也会被认为是一个有效备份,这就意味着当你执行备份到NUL设备后,你后续的所有差异备份都将不可用,除非你在执行备份到NUL设备后,再执行一次常规的数据库完整备份。假如你执行事务日志备份到NUL设备,那么你将破坏日志恢复链,导致后续事务日志备份不可用。

如果你必须在SQL Server 2000上执行备份到NUL设备的话,一定要做好备灾恢复的准备。

假设我现在已经测量出我的AdventureWorks读吞吐量为46MB/sec。这就是说,46MB/sec是最大的备份吞吐量了,也是我的磁盘能提供给SQL Server备份读线程最快的速度了。那我们如何提高这个速度呢?使用更快的磁盘肯定是一种方法。另外的方法就是把数据库文件分散到多个物理磁盘上,以便于在读数据时可以同步创建多个读线程。减小数据库文件的碎片级别也可以提高吞吐量,特别是当数据库文件有大量碎片存在时。

写吞吐量

现在开始说说写吞吐量。执行一个文件备份,在我的系统中,我得到了如下的结果:

BACKUP DATABASE successfully processed 7529 pages in 3.300 seconds (18.688 MB/sec).

上面的结果表明写吞吐量在这里成为了瓶颈。我的磁盘可以提供46MB/sec的数据,但是写速度仅为18.688MB/sec。实际上,我把备份文件放在了同数据文件相同的磁盘上,当我把备份文件放在不同的物理磁盘上时,我得到如下的结果:

BACKUP DATABASE successfully processed 7529 pages in 1.421 seconds (43.399 MB/sec).

上面的结果已经好很多了。现在读写速度都取决于磁盘了,整体的吞吐量已经明显提高了。所以把备份文件放到不同的物理磁盘上就是一种提高写吞吐量的方法。另一个方法就是把备份分散成不同的文件。如果磁盘可以控制它的话,那么文件可以位于相同的物理磁盘上。如果不能,你最好把文件分散到不同的物理磁盘上。使用更快的磁盘存储备份文件是另一个好的选择。

然而,让我们回到第一步,再看看那个整体图。想一想备份吞吐量的第一步是读吞吐量。也就是说即使你的写吞吐量达到150MB/sec,但是如果读吞吐量只有46MB/sec的话,也无济于事,你能获得的最大备份吞吐量还是46MB/sec。

总结

首先我们总结一下我们都做了什么:

我们测量了读吞吐量为46MB/sec,我们讨论了如下方法来提高这个数值:

  • 使用更快的磁盘。
  • 把多个数据库文件存储在不同的物理磁盘上
  • 减少数据库文件碎片级别

我们在数据库文件所在磁盘执行了备份执行,备份吞吐务为18MB/sec。很糟的速度,我们知道读吞吐量为46MB/sec,所以我们把目标放到了写吞吐量上。然后,我们把备份文件放到了与数据库文件不同的物理磁盘上。备份吞吐量为43MB/sec。速度不错。我也还可以提高这一数值吗?看起来好像是不行了。但是如果我们的写吞吐量仅仅为25MB/sec的话,我们还可以从以下几方面来考虑:

  • 使用更快的磁盘进行备份
  • 把备份文件分割成多个文件(在相同或不同的物理磁盘上,这取决于磁盘的吞吐量)
  • 使用备份压缩工具。假如压缩速度非常好的话,那么就会减少写到磁盘上的数据量,从而加大写吞吐量。一般情况执行这种压缩程序都会消耗大量的CPU资源

补充说明

为了获得最好的备份吞吐量,下面这几点在最开始创建数据库时就应该考虑到。实际上,下面这几点也同样适用于提高你数据库的应用性能。

  • 磁盘速度:使用最快的磁盘或是在预算允许的前提下进行磁盘配置来提高备份吞吐量。
  • 数据库文件:把数据库文件分散到多个物理磁盘上,以便于SQL Server使用多个读线程去每个磁盘上读取数据。对比单数据文件的数据库存储来讲,多数据文件可以在很短时间内完成数据的读取。
  • 使用不同的物理磁盘:SQL Server的读线程数量是基于你数据库文件所在的盘符数量的。然而,假如你的盘符是相同物理磁盘上的分区,而且你的磁盘不能满足读线程的读取要求时,你的备份吞吐量将会很差。
  • 文件碎片:创建数据时指定的数据库的初始大小就相当于指定的数据库减少文件碎片的期望最大值。假如数据库文件被设置为自动增长,且设置了一个最大增长值的话,这样也要有助于减小碎片。
  • 有计划的存储你的事务日志到独立的磁盘中:把你的事务日志文件存储在独立于数据库文件的磁盘中,甚至独立于操作系统或是其他经常使用I/O的应用程序,有助于在执行事务日志备份时提高读写吞吐量。事务日志的磁盘的I/O操作是自然相连的,而不是数据文件I/O那种随机的操作。把事务日志文件同数据文件放在同一个盘上的话,当数据库忙碌时,会使事务日志备份变慢。
  • 有计划的存储你的备份到独立的磁盘中:把你的备份文件存储在独立于数据库文件的磁盘中,甚至独立于操作系统或是其他经常使用I/O的应用程序,有助于提高写吞吐量。

获取备份速度数据

你可以从msdb..backupset表中获取备份速度数据。backup_start_date,backup_finish_date和backup_size列提供了计算备份速度所需的所有数据细节信息。注意备份大小不是定义数据库大小所必需的,因为SQL Server 2005不备份包括已被删除数据的数据页。具体细节请参见article。

下面的脚本可以显示出你所有数据库的备份时间:

SELECT database_name, backup_start_date, CAST(CAST((backup_size / (DATEDIFF(ss, backup_start_date, backup_finish_date))) / (1024 * 1024) AS NUMERIC(8, 3)) AS VARCHAR(16)) + ‘ MB/sec‘ speed 
FROM msdb..backupset 
ORDER BY database_name, backup_start_date

时间: 2024-11-08 13:10:58

SQL Server如何提高数据库备份的速度的相关文章

SQL Server 维护计划实现数据库备份(策略实战)

一.背景 之前写过一篇关于备份的文章:SQL Server 维护计划实现数据库备份,上面文章使用完整备份和差异备份基本上能解决数据库备份的问题,但是为了保障数据更加安全,我们需要再次完善我们的备份计划: 下面这篇文章主要加入了日志备份,并对设计备份的频率和设计命名规范等问题进行实战: 二.最佳实践 (一) 备份计划 1) 每周星期日的2:00:00执行数据库的完整备份: 2) 每周星期一至星期六每天的2:00:00执行数据库的差异备份: 3) 每天在8:00:00和23:59:59之间.每1小时

SQL Server 维护计划实现数据库备份(Step by Step)(转)

SQL Server 维护计划实现数据库备份(Step by Step) 一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server 数据库最小宕机迁移方案,里面使用SQL脚本(T-SQL)完成完全备份.差异备份.完全还原.差异还原等:        有了上面的基础,我们加入了数据库的备份元素,通过维护计划来生成数据库的备份文件,这包括两种文件,数据库的完全备份与差异备份,有了这两个文件,我们可以通过SQL Server 备份和还

SQL Server 2012将数据库备份到网络中的共享文件夹

把计算机computer1 中的数据库备份到计算机computer2(IP:192.168.0.130)中的一个共享文件夹下 在computer2中的F盘下建一个共享文件夹叫DBBackupShare,注意在安全tab页内要把Everyone加进去. 在computer1和computer2计算机中各建立一个用户,都是管理员组的,用户名和密码必须一样, cmd命令行 给计算机添加用户,用户名是sql Net user sql 123 /add 把用户sql添加到管理员组里 Net localgr

SQL Server 2008怎么自动备份数据库

在SQL Server 2008数据库中.为了防止数据的丢失我们就需要按时的来备份数据库了.要是每天都要备份的话,人工备份会很麻烦的,自动备份的话就不需要那么麻烦了,只 要设置好了,数据库就会自动在你设置的时间段里备份.那么自动备份要怎么设置呢.下面为大家讲解. 工具/原料 电脑一台 要安装SQL Server 2008数据库. 方法/步骤 1 在电脑开始菜单中选择“SQL Server Management Studio”双击.在出现的界面中点击“连接”按钮. 2 在出现的“ Microsof

SQL Server中使用数据库快照的方式来完成测试环境中数据库的轻量级备份还原操作

原文:SQL Server中使用数据库快照的方式来完成测试环境中数据库的轻量级备份还原操作 在开发或者测试环境的数据库中,经常会发现有开发或者测试人员误删除表或者数据的情况,对于开发或者测试库,一般都没有安排定时的备份任务去备份数据库,一方面是由于存储资源有限,不太可能给开发或者测试环境准备大量的存储空间,二是必要性不是很强,开发或者测试库的数据库对象变化太多,通过还原备份的方式又有可能冲掉其最近新建的数据库对象.但是不得不面对的问题就是个别人在执行update或者delete操作的时候“忘了加

SQL Server和Oracle数据库索引介绍

SQL Server和Oracle数据库索引介绍 1 SQL Server中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度.索引包含由表或视图中的一列或多列生成的键.这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行. 表或视图可以包含以下类型的索引: 聚集索引 聚集索引根据数据行的键值在表或视图中排序和存储这些数据行.索引定义中包含聚集索引列.每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序. 只有当表包含聚集索引

SQL Server 2008 R2数据库镜像部署图文教程

数据库镜像是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中 概述 “数据库镜像”是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中.建议使用不同位置的两台服务器来承载.在同一时刻,其中一台上的数据库用于客户端访问,充当“主体服务器”角色:而另一台则根据镜像会话的配置和状态,充当热备份服务器,即“镜像服务器角色”,这两

SQL Server之 (一) 数据库简介 SQL Server环境配置 数据库基础知识

   前言 这个是我工作两年多后,再次从最基础的SQL入门开始,认真的学一遍SQL Server,捡漏和巩固都有;因为自己刚开始学的时候,总是心烦气躁,最近换工作,发现1到2年经验,问到基础性的东西还是很多,这个时候需要的是扎实的基础功夫,所以一系列打击+反省后,自己节假日在家从最基础重新认识一下SQL Server,继续沉淀一下.哪里有不对或需深入探讨,请直接留言或者小窗我;欢迎~ (一) 数据库简介   SQL Server环境配置   数据库基础知识 1.什么是数据库,数据库有哪些特点,为

SQL Server 2014的数据库引擎新增功能(参考sqlserver官方文档)

SQL Server 2014数据库引擎引入了一些新功能和增强功能,这些功能可以提高设计.开发和维护数据存储系统的架构师.开发人员和管理员的能力和工作效率. 以下是数据库引擎已增强的方面. 数据库引擎功能增强 内存优化表 内存中 OLTP 是一种内存优化的数据库引擎,它集成到 SQL Server 引擎中. 内存中 OLTP 已针对 OLTP 进行优化. SQL Server Azure 中的数据文件 Azure 中的 SQL Server 数据文件可为作为SQL Server Azure bl