SQLServer存儲引擎——03.日誌

3. SQLServer存儲引擎之日誌篇數據庫

  (3.1)日誌結構日誌

  (3.1.1)物理日誌blog

    (0)物理日誌即數據庫的.ldf文件, 固然後綴名是能夠自定義的,默認是.ldf進程

    (1)一個SqlServer數據庫,能夠定義多個物理日誌文件,SQL Server邏輯上把他們看成一個總體,順序寫入日誌記錄,用完第一個,再用下一個:即第一個日誌文件的當前空間,若是沒有可分配的VLF時,就會使用下一個日誌文件的VLF,直到最後一個日誌文件也沒有可分配的VLF時,會從新回到第一個日誌開始增加;VLF的使用以下圖:事務

                        

      SQLServer把事務日誌文件劃分爲多個VLF(Virtual Log File),即虛擬日誌文件。內存

    (2)物理日誌文件初始大小至少爲512KB效率

    (3)日誌文件不能夠放在文件組內im

  (3.1.2)虛擬日誌數據

    (0)日誌文件除了文件頭頁外,其餘VLF部分都不是以數據頁的方式來存儲的,物理日誌以虛擬日誌(VLF)爲最小單位進行增加、收縮和使用,一般VLF大小爲256KB,但第一個VLF的大小最小爲8K,由於第一個頁面8K爲日誌文件頭頁面。img

    (1)虛擬日誌是由SQLServer來維護的,大小不一,數量不定,不能夠人工干預,但能夠事先分配較大的物理日誌,或者設置較大的物理日誌的增量,以減小虛擬日誌的生成,從而減小數據庫維護虛擬日誌的成本,以及提升數據庫啓動,備份還原的速度。

  (3.1.3)邏輯日誌

    (0)數據庫邏輯操做的記錄,每一個事務可能會有多條日誌記錄,每條日誌記錄由惟一的順序增加的LSN來標記,經過DBCC LOG()來查看日誌文件以下圖:

                                           

    (1)SQL Server用日誌記錄來保證事務的基本屬性,及數據庫恢復。

    (2)SQLServer數據庫遵循預寫日誌(WAL)的原則。

  (3.1.4)活動日誌

    (0)從MinLSN起日後的日誌部分即爲活動日誌。以下圖,以最先活動事務起點LSN142做爲MinLSN,從142日後的日誌部分爲活動日誌:

                                              

    (1)檢查點LSN、最先活動事務起點LSN、還沒有傳遞給分發數據庫的最先的複製事務起點的LSN,當中的最小值將做爲MinLSN;

  

  (3.2)日誌管理

    (3.2.1)截斷

      (0)SQL SERVER能夠經過截斷日誌以實現物理日誌的迴繞,截斷操做僅是將被截斷的日誌部分標記爲可重用,根據數據庫恢復模式的設置:SIMPLE/BULK_LOGGED/FULL,在SIMPLE模式下,SQL SERVER會自動截斷日誌,相似於ORACLE的非歸檔模式。

      (1)SIMPLE模式下,CHECKPOINT會自動截斷日誌的非活動部分,FULL和BULK_LOGGED模式下,只有經過日誌備份來截斷日誌。

      (2)SQL SERVER截斷日誌後,並不會主動釋放日誌文件佔用的磁盤空間,須要手動去收縮日誌文件纔會釋放,但一般不建議這樣作,畢竟當日志文件再次增加時又須要去從新申請磁盤空間。

      (3)日誌文件的截斷以VLF爲單位,從不活動的日誌記錄所在的第一個VLF起,到MinLSN所在的VLF的前一個VLF,以下圖:

                                      

      (4)只能夠截斷非活動日誌部分。

      (5)當運行一個長事務且一直未結束時,此時會影響MinLSN的推動,進而影響日誌文件的截斷,從而會出現,即使是SIMPLE模式下,日誌文件也會變得很大,甚至出現吃掉磁盤全部空間,出現事務日誌已滿的9002錯誤。

    (3.2.2)備份

      (0)SQL SERVER沒有ORACLE中的ARCH進程,沒法像ORACLE同樣自動歸檔日誌,須要手動去備份,並且在有多個物理日誌文件時,也沒法對單個日誌文件進行備份。

      (1)當數據庫故障恢復時,在線的日誌須要手動經過NO_TRUNCATE選項去備份,即尾日誌備份,而後再利用尾日誌備份結合以前的備份進行故障恢復。

    (3.2.3)還原

      還原在兩種狀況下發生,一是數據庫重啓時;一是手動經過備份集恢復時;

      (0)還原的過程,是把數據和日誌放在內存中,模擬用戶讀寫操做以進行的。還原時只須要重作或撤銷最後一個檢查點以後的日誌部分,這也是檢查點機制提升恢復效率的緣由所在。

      (1)REDO和UNDO:

        還原時若是事務日誌已結束(提交或回滾),並且數據頁還沒有被刷新,則重作(REDO);

        若是事務日誌未結束,但數據髒頁已被刷新到磁盤,則回滾(UNDO)。

      (2)日誌記錄中包含數據頁被修改前及當次修改的兩個LSN,若是目前數據頁頭的LSN等於修改前的LSN,則日誌操做被重作;若是數據頁頭的LSN等於或大於當次修改的LSN,則跳過日誌操做,不重作。

      (3)數據庫重啓不須要人工干預,經過備份集恢復須要人工干預。由於有時須要恢復到某個操做點,並非徹底恢復全部日誌記錄。

 

   

 --------------------------------------------------------------------------------------  原文轉自:http://qianzhang.blog.51cto.com/317608/1217346--------------------------------------------------------------------------------------

相關文章
相關標籤/搜索