浅谈SQL Server中的快照-1

上一篇 / 下一篇  2012-06-29 13:49:55 / 个人分类:数据库

Pn yl zXxE0  简介

%O{b4N#tM s0

zu~R,^Y3^ |:d0  数据库快照,正如其名称所示那样,是数据库在某一时间点的视图。是SQLServer在2005之后的版本引入的特性。快照的应用场景比较多,但快照设计最开始的目的是为了报表服务。比如我需要出2011的资产负债表,这需要 数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点。快照还可以和镜像结合来达到读写分离的目的。下面我们来看什么是快照。

"jMAn:S"z0

\ s T5|D0  什么是快照

,R$Lc!`h[^F0

)D&D}W6s,y0  数据库快照是 SQL Server 数据库(源数据库)的只读静态视图。换句话说,快照可以理解为一个只读的数据库。利用快照,可以提供如下好处:51Testing软件测试网8M sMVo4E

51Testing软件测试网"BHIut pDQ/m

  ● 提供了一个静态的视图来为报表提供服务

0a%p(b~!w l([lxL0

^ j;L0rEdC\-L0  ● 可以利用数据库快照来恢复数据库,相比备份恢复来说,这个速度会大大提高(在下面我会解释为什么)

DjF|+cT~9^051Testing软件测试网)m-k,L| |jikW2I y

  ● 和数据库镜像结合使用,提供读写分离51Testing软件测试网 B^'j6t8Ua(Q

bcT | f W0  ● 作为测试环境或数据变更前的备份,比如我要大批导入或删除数据前,或是将数据提供给测试人员进行测试前,做一个快照,如果出现问题,则可以利用快照恢复到快照建立时的状态51Testing软件测试网-L8R}me0X.Z3Ki

9tq'w/|:f(ZW(G/N0  快照的原理

r_*{ B+S!f_r$q0

fU pO j3T~H/w0   与备份数据库复制整个数据库不同,快照并不复制整个数据库的页,而是仅仅复制在快照建立时间点之后改变的页。因此,当利用快照进行数据库恢复时,也仅仅 将那些做出改变的页恢复到源数据库,这个速度无疑会大大高于备份和恢复方式。这个原理如图1所示(图摘自SQL Server 2008揭秘)。51Testing软件测试网9?Lt^Q}.Mc

R%C.q6^8Ui0

图1.镜像的原理51Testing软件测试网.x&?Q`Pcx

   由图1可以看出,快照并不是复制整个整个数据库,而是当源数据库更改时,源数据库会将更改之前的数据存入快照数据库之后,再对源数据库进行更改。因此可 以看出,源数据库上建立快照会给IO增加额外负担.当对快照数据库进行查询时,快照时间点之后更改的数据会查询快照数据库文件,而快照时间点之后未更改的 数据,将会查询源数据库文件。这个概念如图2所示(图摘自SQL Server 2008揭秘)。

3zx w;|4y|Et0

?o2GY8V0

图2.查询快照数据库时查询的分布51Testing软件测试网'Mz \K7Ph u

"t[ Y |#s ]5z0  写入时复制(Copy On Writing)和稀疏文件(Sparse Flie)51Testing软件测试网C$g)E+IR$\

51Testing软件测试网mMEb)D

  由上图中可以看出,快照数据库的文件是基于稀疏文件(Sparse File),稀疏文件是NTFS文件系统的一项特性。所谓的稀疏文件,是指文件中出现大量0的数据,这些数据对我们用处并不大,却一样占用着磁盘空间。因 此NTFS对此进行了优化,利用算法将这个文件进行压缩。因此当稀疏文件被创建时,稀疏文件刚开始大小会很小(甚至是空文件),比如图3所示的文件就是一 个稀疏文件。虽然逻辑上占了21M,但文件实际上占了128KB磁盘空间。

?#LD6IU3kz0

!\2TpF:pu$X0

图3.一个稀疏文件

3Dt yh+m0f,IO/jR0

  对于快照来说,除了通过快照数据库文件的属性来看快照的大小之外,也可以通过DMV来查看,如图4所示。

-L$OzHr5d,Is#o"a(d{0

A~Y\2W)T3e"^0

图4.通过DMV查看快照数据库大小51Testing软件测试网7M%A/@,W a_*j

  而当快照创建后,随着对源数据库的改变逐渐增多,稀疏文件也会慢慢增长,概念如图4所示。51Testing软件测试网Mt^K/`X*Aq^

|ja|&Hff0

图5.随着源数据库的更改越来越多,稀疏文件不断增长

fj cMM)|0

  所以,通常来说,当稀疏文件增长到源数据库文件大小的30%时,就应该考虑重建快照了。51Testing软件测试网o+fk;d!T;W

  而稀疏文件的写入是利用了微软的写入时复制技术(Copy-On-Writing),意思是在复制一个对象时并不是 真正把对象复制到另一个位置,而是在新的对象中映射一个指针,指向原对象的位置。这样当对新对象执行读操作时,直接指向原对象。而在对新的对象执行写操作 时,将改变部分对象的指针指向到新的地址中。并修改映射表到新的位置中。51Testing软件测试网+Z&SK!_%j3q


TAG:

 

评分:0

我来说两句

Open Toolbar