<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

    淺談SQL Server中的快照

     簡(jiǎn)介

      數(shù)據(jù)庫(kù)快照,正如其名稱所示那樣,是數(shù)據(jù)庫(kù)在某一時(shí)間點(diǎn)的視圖。是SQL Server在2005之后的版本引入的特性。快照的應(yīng)用場(chǎng)景比較多,但快照設(shè)計(jì)最開始的目的是為了報(bào)表服務(wù)。比如我需要出2011的資產(chǎn)負(fù)債表,這需要數(shù)據(jù)保持在2011年12月31日零點(diǎn)時(shí)的狀態(tài),則利用快照可以實(shí)現(xiàn)這一點(diǎn)。快照還可以和鏡像結(jié)合來達(dá)到讀寫分離的目的。下面我們來看什么是快照。

      什么是快照

      數(shù)據(jù)庫(kù)快照是 SQL Server 數(shù)據(jù)庫(kù)(源數(shù)據(jù)庫(kù))的只讀靜態(tài)視圖。換句話說,快照可以理解為一個(gè)只讀的數(shù)據(jù)庫(kù)。利用快照,可以提供如下好處:

      ● 提供了一個(gè)靜態(tài)的視圖來為報(bào)表提供服務(wù)

      ● 可以利用數(shù)據(jù)庫(kù)快照來恢復(fù)數(shù)據(jù)庫(kù),相比備份恢復(fù)來說,這個(gè)速度會(huì)大大提高(在下面我會(huì)解釋為什么)

      ● 和數(shù)據(jù)庫(kù)鏡像結(jié)合使用,提供讀寫分離

      ● 作為測(cè)試環(huán)境或數(shù)據(jù)變更前的備份,比如我要大批導(dǎo)入或刪除數(shù)據(jù)前,或是將數(shù)據(jù)提供給測(cè)試人員進(jìn)行測(cè)試前,做一個(gè)快照,如果出現(xiàn)問題,則可以利用快照恢復(fù)到快照建立時(shí)的狀態(tài)

      快照的原理

      與備份數(shù)據(jù)庫(kù)復(fù)制整個(gè)數(shù)據(jù)庫(kù)不同,快照并不復(fù)制整個(gè)數(shù)據(jù)庫(kù)的頁(yè),而是僅僅復(fù)制在快照建立時(shí)間點(diǎn)之后改變的頁(yè)。因此,當(dāng)利用快照進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)時(shí),也僅僅將那些做出改變的頁(yè)恢復(fù)到源數(shù)據(jù)庫(kù),這個(gè)速度無疑會(huì)大大高于備份和恢復(fù)方式。這個(gè)原理如圖1所示(圖摘自SQL Server 2008揭秘)。

    圖1.鏡像的原理

      由圖1可以看出,快照并不是復(fù)制整個(gè)整個(gè)數(shù)據(jù)庫(kù),而是當(dāng)源數(shù)據(jù)庫(kù)更改時(shí),源數(shù)據(jù)庫(kù)會(huì)將更改之前的數(shù)據(jù)存入快照數(shù)據(jù)庫(kù)之后,再對(duì)源數(shù)據(jù)庫(kù)進(jìn)行更改。因此可以看出,源數(shù)據(jù)庫(kù)上建立快照會(huì)給IO增加額外負(fù)擔(dān).當(dāng)對(duì)快照數(shù)據(jù)庫(kù)進(jìn)行查詢時(shí),快照時(shí)間點(diǎn)之后更改的數(shù)據(jù)會(huì)查詢快照數(shù)據(jù)庫(kù)文件,而快照時(shí)間點(diǎn)之后未更改的數(shù)據(jù),將會(huì)查詢?cè)磾?shù)據(jù)庫(kù)文件。這個(gè)概念如圖2所示(圖摘自SQL Server 2008揭秘)。

    圖2.查詢快照數(shù)據(jù)庫(kù)時(shí)查詢的分布

    寫入時(shí)復(fù)制(Copy On Writing)和稀疏文件(Sparse Flie)

      由上圖中可以看出,快照數(shù)據(jù)庫(kù)的文件是基于稀疏文件(Sparse File),稀疏文件是NTFS文件系統(tǒng)的一項(xiàng)特性。所謂的稀疏文件,是指文件中出現(xiàn)大量0的數(shù)據(jù),這些數(shù)據(jù)對(duì)我們用處并不大,卻一樣占用著磁盤空間。因此NTFS對(duì)此進(jìn)行了優(yōu)化,利用算法將這個(gè)文件進(jìn)行壓縮。因此當(dāng)稀疏文件被創(chuàng)建時(shí),稀疏文件剛開始大小會(huì)很小(甚至是空文件),比如圖3所示的文件就是一個(gè)稀疏文件。雖然邏輯上占了21M,但文件實(shí)際上占了128KB磁盤空間。

    圖3.一個(gè)稀疏文件

      對(duì)于快照來說,除了通過快照數(shù)據(jù)庫(kù)文件的屬性來看快照的大小之外,也可以通過DMV來查看,如圖4所示。

    圖4.通過DMV查看快照數(shù)據(jù)庫(kù)大小

      而當(dāng)快照創(chuàng)建后,隨著對(duì)源數(shù)據(jù)庫(kù)的改變逐漸增多,稀疏文件也會(huì)慢慢增長(zhǎng),概念如圖4所示。

    圖5.隨著源數(shù)據(jù)庫(kù)的更改越來越多,稀疏文件不斷增長(zhǎng)

      所以,通常來說,當(dāng)稀疏文件增長(zhǎng)到源數(shù)據(jù)庫(kù)文件大小的30%時(shí),就應(yīng)該考慮重建快照了。

      而稀疏文件的寫入是利用了微軟的寫入時(shí)復(fù)制技術(shù)(Copy-On-Writing),意思是在復(fù)制一個(gè)對(duì)象時(shí)并不是真正把對(duì)象復(fù)制到另一個(gè)位置,而是在新的對(duì)象中映射一個(gè)指針,指向原對(duì)象的位置。這樣當(dāng)對(duì)新對(duì)象執(zhí)行讀操作時(shí),直接指向原對(duì)象。而在對(duì)新的對(duì)象執(zhí)行寫操作時(shí),將改變部分對(duì)象的指針指向到新的地址中。并修改映射表到新的位置中。

     使用快照的限制

      使用快照存在諸多限制,由于列表太長(zhǎng),我只概括的說一下主要限制。

      ● 當(dāng)使用快照恢復(fù)數(shù)據(jù)庫(kù)時(shí),首先要?jiǎng)h除其他快照

      ● 快照在創(chuàng)建時(shí)的時(shí)間點(diǎn)上沒有commit的數(shù)據(jù)不會(huì)被記入快照

      ● 快照是快照整個(gè)數(shù)據(jù)庫(kù),而不是數(shù)據(jù)庫(kù)的某一部分

      ● 快照是只讀的,意思是不能在快照上加任何更改,即使是你想加一個(gè)讓報(bào)表跑得更快的索引

      ● 在利用快照恢復(fù)數(shù)據(jù)庫(kù)時(shí),快照和源數(shù)據(jù)庫(kù)都不可用

      ● 快照和源數(shù)據(jù)必須在同一個(gè)實(shí)例上

      ● 快照數(shù)據(jù)庫(kù)的文件必須在NTFS格式的盤上

      ● 當(dāng)磁盤不能滿足快照的增長(zhǎng)時(shí),快照數(shù)據(jù)庫(kù)會(huì)被置為suspect狀態(tài)

      ● 快照上不能存在全文索引

      其實(shí),雖然限制看上去很多,但只要明白快照的原理,自然能推測(cè)出快照應(yīng)該有的限制。

      快照的創(chuàng)建和使用

      無論是使用SSMS或是命令行,快照只能通過T-SQL語(yǔ)句創(chuàng)建。在創(chuàng)建數(shù)據(jù)庫(kù)之前,首先要知道數(shù)據(jù)庫(kù)分布在幾個(gè)文件上,因?yàn)榭煺招枰獙?duì)每一個(gè)文件進(jìn)行copy-on-writing。如圖6所示。

    圖6.首先查出數(shù)據(jù)庫(kù)的文件分布

      根據(jù)圖6的數(shù)據(jù)庫(kù)分布,我們通過T-SQL創(chuàng)建快照,如圖7所示。

    圖7,根據(jù)圖6的數(shù)據(jù)庫(kù)信息創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)快照

      當(dāng)快照數(shù)據(jù)庫(kù)創(chuàng)建成功后,就可以像使用普通數(shù)據(jù)庫(kù)一樣使用快照數(shù)據(jù)庫(kù)了,如圖8所示。

    圖8.快照數(shù)據(jù)庫(kù)和普通數(shù)據(jù)庫(kù)一樣使用



     通過如下語(yǔ)句可以看到,快照數(shù)據(jù)庫(kù)文件和源數(shù)據(jù)庫(kù)的文件貌似并無區(qū)別,僅僅是快照數(shù)據(jù)庫(kù)文件是稀疏文件,如圖9所示。

    圖9.源數(shù)據(jù)庫(kù)和快照數(shù)據(jù)庫(kù)

      而刪除快照數(shù)據(jù)庫(kù)和刪除普通數(shù)據(jù)庫(kù)并無二至,也僅僅是使用DROP語(yǔ)句,如圖10所示。

    圖10.刪除快照數(shù)據(jù)庫(kù)

      我們也可以利用快照恢復(fù)數(shù)據(jù)庫(kù),這個(gè)恢復(fù)速度要比普通的備份-恢復(fù)來的快得多,這也可以將數(shù)據(jù)庫(kù)呈現(xiàn)給測(cè)試人員,當(dāng)測(cè)試結(jié)束后,恢復(fù)數(shù)據(jù)庫(kù)到測(cè)試之前的狀態(tài)。如圖11所示。

    圖11.利用快照恢復(fù)數(shù)據(jù)庫(kù)

      使用快照其他一些需要考慮的因素

      1、快照數(shù)據(jù)庫(kù)的安全設(shè)置繼承源數(shù)據(jù)庫(kù)的安全設(shè)置。也就是說能訪問源數(shù)據(jù)庫(kù)的用戶或角色也能訪問快照數(shù)據(jù)庫(kù),當(dāng)然,因?yàn)榭煺諗?shù)據(jù)庫(kù)是只讀的,所以無論任何角色或人都無法修改快照數(shù)據(jù)庫(kù)。

      2、我們由文章前面圖5看出,隨著快照存在的時(shí)間越來越長(zhǎng),快照會(huì)不斷增長(zhǎng)。所以推薦在快照達(dá)到源數(shù)據(jù)庫(kù)大小30%之前,重新創(chuàng)建快照。

      3、由于快照會(huì)拖累數(shù)據(jù)庫(kù)性能,所以數(shù)據(jù)庫(kù)不宜存在過多快照。

      總結(jié)

      本文簡(jiǎn)單講述了數(shù)據(jù)庫(kù)快照的概念,原理以及使用。數(shù)據(jù)庫(kù)快照可以在很多場(chǎng)景下使用,無論是用于報(bào)表,還是和鏡像配合提供負(fù)載,以及利用快照恢復(fù)數(shù)據(jù)庫(kù),使用得當(dāng)?shù)脑挘煺諏?huì)是一把利器。


    posted on 2012-06-29 09:25 順其自然EVO 閱讀(194) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫(kù)

    <2012年6月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 麻豆69堂免费视频| 久久综合九九亚洲一区| 日本黄色免费观看| 免费看的黄色大片| 小小影视日本动漫观看免费| 成年女人免费视频播放77777| 免费观看的毛片大全| 中文字幕乱码免费视频| 男女超爽刺激视频免费播放| 亚洲中文无码永久免费| 成人免费无码大片A毛片抽搐| 日本高清色本免费现在观看| 免费jjzz在线播放国产| 亚洲熟伦熟女新五十路熟妇| 国产亚洲大尺度无码无码专线| 国产亚洲无线码一区二区| 亚洲色图在线播放| 亚洲人成网站在线观看播放动漫| 国产成人精品日本亚洲网址| 亚洲av日韩精品久久久久久a | 日日操夜夜操免费视频| 又爽又高潮的BB视频免费看| 国产成人精品亚洲精品| 亚洲精品V欧洲精品V日韩精品| 亚洲精品视频在线| 亚洲a视频在线观看| 日韩国产欧美亚洲v片| 一本久久A久久免费精品不卡 | 亚洲校园春色另类激情| 亚洲成AV人影片在线观看| 免费无码午夜福利片| 永久免费AV无码网站国产| 日本视频一区在线观看免费| 免费看的黄色大片| 中文字幕专区在线亚洲| 亚洲精品亚洲人成在线麻豆| 亚洲经典千人经典日产| 中国videos性高清免费| 国产精品成人免费福利| 又大又黄又粗又爽的免费视频| 亚洲va久久久噜噜噜久久|