sql server 备份恢复效率

如何提高备份的速度呢?

其实这个问题和如何让系统跑的更快是一样的,要想系统跑的更快,无非就是:优化系统,或者就是更好更强大的服务器,特别是更多的cpu、更大的内存、更快的硬盘。

提高备份的速度也是一样的,一般备份数据库,不太可能是系统宕机,为什么呢? 因为备份数据库所使用的系统资源不会占用太多,所以,要想提高备份的速度,那么只有允许备份使用更多的内存才行,通过下面的2个选项,给备份分配更多的资源,那么备份速度就大大提高了。

数据传输选项

1、缓冲区使用的总计空间由下面公式确定:buffercount*maxtransfersize。

2、BUFFERCOUNT = { buffercount | @buffercount_variable }
指定用于备份操作的 I/O 缓冲区总数。 可以指定任何正整数;但是,较大的缓冲区数可能导致由于 Sqlservr.exe 进程中的虚拟地址空间不足而发生“内存不足”错误。

3、MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }
指定要在 SQL Server 和备份介质之间使用的最大传输单元(字节)。 可能的值是 65536 字节 (64 KB) 的倍数,最多可到 4194304 字节 (4 MB)。

能不能再快呢?

其实在备份的时候,之所以慢,是和IO的性能相关的,由于IO是整个计算机体系中最慢的,所以才导致备份也慢,但如果我们能减少写入磁盘的数据,不就可以提高性能了嘛,当然,在减少写入数据的同时,需要通过消耗更多的CPU资源来进行压缩,减小备份的数据大小。

compression选项:

指定对于此备份是否执行备份压缩。
从 SQL Server 2008 R2 开始,SQL Server 2008 R2 Standard 和所有更高版本都支持备份压缩。安装时,默认行为是不进行备份压缩。但此默认设置可通过设置 backup compression default 服务器配置选项进行更改。

默认情况下,压缩备份时,将执行校验和(也就是checksum选项)以检测是否存在介质损坏情况。

在SQL SERVER 的参数可知,默认服务器是不启用备份压缩的。

1
2
3
4
5
select name
       description, 
       value_in_use --是否启用此参数
from sys.configurations 
where name ='backup compression default'

如果要启用备份压缩,可以运行如下的命令:

1
2
3
exec sp_configure 'backup compression default',1 
reconfigure 
go 

还能再快吗?

这次是运用IO的并行特性,也就是如果在服务器上有多个物理硬盘,那么可以把一个备份文件条带化,比如,有3个硬盘,那么就把原来的备份文件,分成3份,分别存储到3个硬盘上。

下面是实验代码

1、先建库,建表,插入大量数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use master
go
 
if DB_ID('db_test') is not null
   drop database db_test
go
 
CREATE DATABASE db_test
ON
(
    NAME = db_test_DATA,
    FILENAME = 'E:\db_test.mdf'
)
 
LOG ON
(
    NAME = db_test_LOG,
    FILENAME = 'E:\db_test.ldf'
)
GO
 
use db_test
go
 
select * Into test
from sys.objects
go
 
insert into test
select *
from test
go 20

2、普通的完整备份,耗时213秒:

1
2
3
4
5
6
7
8
backup database db_test
to disk = 'e:\db_test.bak'
with format
/*
已为数据库 'db_test',文件 'db_test_DATA' (位于文件 1 上)处理了 356448 页。
已为数据库 'db_test',文件 'db_test_LOG' (位于文件 1 上)处理了 3 页。
BACKUP DATABASE 成功处理了 356451 页,花费 213.018 秒(13.072 MB/秒)。
*/

3、增大了IO缓冲区的完整备份,耗时142秒:

1
2
3
4
5
6
7
8
9
10
backup database db_test
to disk = 'e:\db_test1.bak'
with format,
     buffercount = 10,
     maxtransfersize = 4194304
/*
已为数据库 'db_test',文件 'db_test_DATA' (位于文件 1 上)处理了 356448 页。
已为数据库 'db_test',文件 'db_test_LOG' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 356449 页,花费 142.101 秒(19.597 MB/秒)。
*/

4、增大IO缓冲区、压缩完整备份,耗时56秒:

1
2
3
4
5
6
7
8
9
10
11
backup database db_test
to disk = 'e:\db_test2.bak'
with format,
     buffercount = 10,
     maxtransfersize = 4194304,
     compression
/*
已为数据库 'db_test',文件 'db_test_DATA' (位于文件 1 上)处理了 356448 页。
已为数据库 'db_test',文件 'db_test_LOG' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 356449 页,花费 56.089 秒(49.648 MB/秒)。
*/

5、增大IO缓冲区、压缩、条带化完整备份,耗时55秒,由于是笔记本电脑,就一个硬盘,所以效果不明显:

1
2
3
4
5
6
7
8
9
10
11
12
13
backup database db_test 
to disk = 'c:\db_test_stripping1.bak'
   disk = 'd:\db_test_stripping2.bak'
   disk = 'e:\db_test_stripping3.bak'
with format,
     buffercount = 10,
     maxtransfersize = 4194304,
     compression  
/*
已为数据库 'db_test',文件 'db_test_DATA' (位于文件 1 上)处理了 356448 页。
已为数据库 'db_test',文件 'db_test_LOG' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 356449 页,花费 55.060 秒(50.576 MB/秒)。
*/

通过在我的普通笔记本电脑上做的这个实验,我们可以看出明显的差别,特别是使用了compression选项后,比最原始的完整备份,速度提高了4倍。那么如果是服务器上,我想应该能提高更多。

sql server 备份恢复效率的更多相关文章

  1. 【SQL Server备份恢复】维护计划实现备份:每周数据库完整备份、每天差异备份、每小时日志备份

    在数据库管理中,数据库备份是非常重要的. 通过维护计划向导,可以很方便的完成数据库备份. 下面的例子说明了如何实现数据库的备份,具体的备份策略是:每周日一次完整备份.每天差异备份(除周日外).每小时日 ...

  2. SQL server 备份/恢复/压缩 进度查询

    第一步,用 sp_who2 查出备份的sid(或在窗口中的连接属性中看) exec sp_who2 第二步,用以下查询获得运行情况(看 percent_complete列) SELECT sessio ...

  3. 17、SQL Server 备份和还原

    SQL Server 备份 恢复模式 SQL Server 数据恢复模式分为三种:完整恢复模式.大容量日志恢复模式.简单恢复模式. 完整恢复模式 默认的恢复模式,它会完整记录下操作数据库的每一个步骤, ...

  4. SQL Server 备份和还原

    SQL Server 备份和还原   SQL Server 备份 恢复模式 SQL Server 数据恢复模式分为三种:完整恢复模式.大容量日志恢复模式.简单恢复模式. 完整恢复模式 默认的恢复模式, ...

  5. 第一篇——第一文 SQL Server 备份基础

    原文:第一篇--第一文 SQL Server 备份基础 当看这篇文章之前,请先给你的所有重要的库做一次完整数据库备份.下面正式开始备份还原的旅程. 原文出处: http://blog.csdn.net ...

  6. SQL Server 备份和还原全攻略

    原文:SQL Server 备份和还原全攻略 一.知识点 完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件.(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份, ...

  7. sql server备份损坏

    sql server备份损坏 转自:https://www.cnblogs.com/zhijianliutang/p/4080916.html 1.备份文件和数据库放在同一个(或一组)的物理磁盘上.磁 ...

  8. SQL Server 2005恢复数据库详细图文教程

    不少需要用到sql2005的程序,有很多新手还是会操作,这里写个详细的图文教程送个菜鸟们,高手请飘过.适用于独立主机的朋友使用,如果你还没安装,请按照这个教程来安装 SQL Server 2005图文 ...

  9. SQL点滴12—SQL Server备份还原数据库中的小把戏

    原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息“is formatted to support  1 media families, ...

随机推荐

  1. #pragma init_seg

    先进后出原则,最先初始化的最后析构! 1.C++中全局对象.变量的构造函数调用顺序是跟声明有一定关系的,即在同一个文件中先声明的先调用.对于不同文件中的全局对象.变量,它们的构造函数调用顺序是未定义的 ...

  2. codeforces水题100道 第六题 Yandex.Algorithm 2011 Qualification 2 A. Double Cola (math)

    题目链接:www.codeforces.com/problemset/problem/82/A题意:五个人排队喝可乐,一个人喝完一杯,就在可乐的最后面放两杯自己喝的可乐,问第n个喝的人是谁.C++代码 ...

  3. ida+windbg调试windows

    jpg 改 pdf https://www.hex-rays.com/products/ida/support/tutorials/debugging_windbg.pdf

  4. IOS设计模式第二篇之单例设计模式

    现在我们的组件已经有组织了.你需要从其他的地方得到数据,你也可以创建一个API类管理数据这个下个设计模式单例里面介绍. 这个单例设计模式确保这个类仅仅拥有一个实例,并且为这个实例提供一个全局的访问点. ...

  5. 【swoole2.0】 PHP + swoole2.0 初体验

    背景: centos7   PHP7.1   swoole2.0 准备工作: 一.  swoole  扩展安装 1 下载swoole cd /usr/local wget -c https://git ...

  6. 【ORACLE 】查询被锁住的对象,并结束其会话

    使用Oracle时,发现有表被锁,又不知道是谁(或者哪个程序)锁的,怎么办 ? 两步走: 1.查找出被锁对象的会话ID和序列号 执行如下SQL: -- 查询出被锁对象,并提供 kill 脚本 SELE ...

  7. [转]OpenStack Neutron运行机制解析概要

    转载自:http://panpei.net.cn/2013/12/04/openstack-neutron-mechanism-introduce/ 自从开学以来,玩OpenStack也已经3个月了, ...

  8. java.lang.NoClassDefFoundError: Could not initialize class xxx 原因

    一.问题及原因 程序里有个工具类,主要是调用它的静态方法来发送mq. 调用场景如下: 结果这两天报了个错: java.lang.NoClassDefFoundError: Could not init ...

  9. Mecanim高级主题:Mecanim Blend Tree应用、Blend Tree 选项、复合Blend Tree

    一.Blend Tree介绍及应用 一个游戏动画的基本任务就是将两个或多个相似的动作混合.也许最广为人知的例子就是依照任务行动的速度将行走和跑动动画混合起来了.另一个例子就是角色在跑动中向左或向右转身 ...

  10. 单引号、双引号、int和char

    首先说一下C语言中用单引号和双引号的不同(一直搞不清楚): 单引号代表的是一个整数,而这个整数的值是编译器所采用的字符集中的字符序列对应的值.所以一般'A'和ASCII中的65意义相同.对于双引号定义 ...