SQL Server存儲引擎(3) - 日誌

日誌

 

1、日誌結構

1.1、物理日誌

0)物理日誌即數據庫的.ldf文件,當然後綴名是可以自定義的,默認是.ldf

 

1)一個SQL SERVER數據庫,可以定義多個物理日誌文件,SQL SERVER邏輯上把它們當成一個整體,順序寫入日誌紀錄,用完第一個再用下一個:即第一個日誌文件的當前空間,如果沒有可分配的VLF時,就會使用下一個日誌文件的VLF,直到最後一個日誌文件也沒有可分配的VLF時,會重新回到第一個日誌開始增長;VLF的使用如下圖:

3.1

 

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

 

3)日誌文件不可以放在文件組內;

 

1.2、虛擬日誌

0)日誌文件除了文件頭頁外,其他VLF部分都不是以數據頁的方式來存儲的,物理日誌以虛擬日誌(VLF)爲最小單位進行增長、收縮和使用,通常VLF大小至少爲256KB,但第一個VLF的大小最小爲256K-8K,因爲第一個頁面8K爲日誌文件頭頁面;

 

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

 

1.3、邏輯日誌

0)數據庫邏輯操作的記錄,每個事務可能會有多條日誌紀錄,每條日誌記錄由唯一的順序增長的LSN來標記;通過DBCC LOG()來查看日誌文件如下圖:

3.2

 

1SQL SERVER數據庫是不可能不記錄日誌的,它要用日誌來保證事務的基本屬性、及數據庫恢復。同時也沒有類似ORACLENOLOGGING開關(並非真正無日誌),最相似的應該就是BULK_LOGGED恢復模式;

 

2)前面說到過,SQL SERVER數據庫遵循預寫日誌(WAL)的原則;

 

1.4、活動日誌

0)從MinLSN起往後的日誌部分即爲活動日誌;如下圖,以最早活動事務起點的LSN142作爲MinLSN,從142起往後的日誌部分爲活動日誌:

3.3

 

1)檢查點LSN、最早活動事務起點的LSN、尚未傳遞給分發數據庫的最早的複製事務起點的 LSN,當中的最小值將作爲MinLSN

 

2、日誌管理

2.1、截斷

0SQL SERVER可以通過截斷日誌以實現物理日誌的迴繞,截斷操作僅是將被截斷的日誌部分標記爲可重用,根據數據庫恢復模式的設置:SIMPLE/BULK_LOGGED/FULL,可以設置爲SIMPLE模式,讓SQL SERVER自動截斷日誌,類似於ORACLE中的非歸檔模式;

 

1SIMPLE模式下,CHECKPOINT會自動截斷日誌的非活動部分,FULLBULK_LOGGED模式下,只有通過日誌備份操作來截斷日誌,另外,備份日誌的TRUNCATE_ONLY/NO_LOG選項在2008的版本中已不再支持,只有通過日誌備份來截斷日誌;

 

2SQL SERVER 截斷日誌後,並不會主動釋放日誌文件佔用的磁盤空間,需要手動去收縮日誌文件纔會釋放,但通常不建議這樣做,畢竟當日志文件再次增大時又需要去重新申請磁盤空間;

 

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

3.4

 

4)只可以截斷非活動的日誌部分;

 

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

 

2.2、備份

0SQL SERVER沒有ORACLE中的ARCH進程,無法像ORACLE一樣自動歸檔日誌,需要去手動備份,而且在有多個物理日誌文件時,也無法對單個日誌文件進行備份;

 

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

 

2.3、還原

還原在兩種情況下發生,一是數據庫重啓時,以下簡稱重啓恢復;一是手動通過備份集恢復時,以下簡稱介質恢復。

 

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

 

1),如果事務日誌已結束(提交或回滾),而且數據頁尚未被刷新,則重做(REDO);如果事務日誌未結束,但數據髒頁已被刷新到磁盤,則回滾(UNDO);

 

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

 

3)重啓恢復不需要人工干預,介質恢復需要手工干預,因爲需要應用備份集,另外,有時需要恢復到某個操作點,並不是完全恢復所有日誌紀錄。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章