SQL Server事務日誌的初學者指南

什麼是事務日誌?

事務日誌是每個SQL Server數據庫的文件組成部分。它包含在SQL Server數據庫中日誌記錄過程中生成的日誌記錄。當涉及到災難恢復時,事務日誌是SQL服務器數據庫中最重要的組件——但是,它必須是未損壞的。在每次數據庫修改-事務發生之後,一個日誌記錄被寫到事務日誌中。所有更改都是按順序編寫的

SQL Server事務日誌存儲什麼?

事務日誌存儲對SQL服務器數據庫所做的每一個事務,但有些事務的日誌記錄最少,比如批量導入或SELECT INTO。在內部,它被分割成稱為虛擬日誌文件(VLFs)的較小部分。當一個VLF變為完整日誌時,繼續寫入事務日誌中的下一個可用日誌。事務日誌文件可以表示為循環文件。當日志記錄到達文件的末尾時,它將從一開始重新開始,但前提是所有的需求都已滿足,並且非活動部分已被截斷。截斷過程是必要的,以標記所有不活躍的部分,以便它們可以再次使用和覆蓋

如果所有以下內容都是正確的,則事務日誌中不再需要日誌記錄。

它所包含的事務已經提交

它更改的數據庫頁面都是由檢查點寫入磁盤的

備份不需要日誌記錄(完整、差異或日誌)

對於讀取日誌(例如數據庫鏡像或複製)[1]的任何特性,都不需要日誌記錄

邏輯日誌是事務日誌的活動部分。日誌序列號(LSN)標識事務日誌中的每個事務。MinLSN是在線事務日誌中最老的活動事務的起始點。

SQL Server事務日誌的初學者指南

SQL Server數據庫可以在沒有事務日誌的情況下工作嗎?

不,這是不可能的,因為SQL服務器設計和ACID遵從性。ACID代表原子性、一致性、隔離性和持久性。所有交易必須具備以下特徵:

一個原子事務要麼完全完成,要麼根本沒有開始

事務通過確保在任何事務結束時系統處於有效狀態,從而強制系統狀態的一致性。

當事務單獨運行時,它似乎是系統一次執行的惟一操作

事務是持久的,意味著一旦成功完成,它對系統所做的所有更改都是永久性的。

一個SQL Server數據庫可以有多個事務日誌嗎?

是的,這是可能的,但只在特定情況下推薦。添加多個事務日誌文件不會以任何方式提高SQL Server數據庫的性能。一次只能寫入一個文件,因此不可能進行並行I/O操作

只有當第一個事務日誌文件已滿或磁盤驅動器空間不足時,才推薦使用多個事務日誌文件。無論哪種方式,這些問題都應該在前面處理,並通過創建事務日誌備份和監視磁盤驅動器上的可用空間來處理

SQL Server事務日誌的初學者指南

為什麼SQL Server事務日誌在增長?

每個事務之後都要登錄到在線事務日誌中。在SQL Server工作期間,如果對數據庫進行更改,事務日誌就會增長,因此維護事務日誌對於正確的SQL Server操作是至關重要的。

SQL Server中有三種恢復模型,根據使用哪一種,

事務日誌的增長表現不同:

簡單恢復模型——不支持事務日誌備份。截斷過程是自動的,空間被回收再利用。存在數據丟失風險,因為自最近的數據庫備份以來發生了更改。在簡單的恢復中,事務日誌增長的可能性很小——只是在長時間運行的事務或事務創建許多更改的特定情況下

大容量日誌恢復模型-定期支持和需要事務日誌備份。沒有自動的事務日誌截斷過程,必須定期進行事務日誌備份,以標記可用於覆蓋的未使用空間。大容量日誌恢復模型通過對大多數批量操作使用最小日誌記錄來減少事務日誌空間的使用。

完全恢復模型——支持事務日誌備份,並且經常需要它。正常情況下不存在數據丟失風險。沒有事務日誌截斷的自動過程,必須定期進行事務日誌備份,以標記可用來覆蓋的未使用空間。在完全恢復中,事務日誌增長的可能性最大,因為所有事務都被記錄

如何在SQL Server中維護事務日誌?

事務日誌維護是SQL Server管理中的重要任務。每天都建議進行監控,更常見的情況是SQL Server數據庫擁有大量的流量。可以使用DBCC SQLPREF命令監視事務日誌空間:

DBCC SQLPERF(LOGSPACE);

GO

SQL Server事務日誌的初學者指南

數據庫名稱——顯示的日誌統計信息的數據庫名稱

日誌大小(MB) -分配給日誌的當前大小。這個值總是小於最初為日誌空間分配的值,因為數據庫引擎為內部頭信息保留少量磁盤空間

日誌空間使用(%)-當前使用事務日誌信息佔用的日誌文件的百分比。

狀態-日誌文件的狀態。

事務日誌應該定期備份,以避免自動增長操作和填充事務日誌文件。通過選擇事務日誌作為備份類型或通過CLI執行以下命令,可以通過SQL Server Management Studio截斷(清除)事務日誌中的空間:

BACKUP LOG ACMEDB

TO DISK = 'C:\ACMEDB.TRN'

GO

備份的空間可以再次重用,它將被新事務覆蓋。有些操作不能合併,必須分開執行:

我需要SQL Server事務日誌備份嗎?

是的,當涉及到災難恢復時,這是最重要的資源之一。只有在使用簡單的恢復模型時,才需要(並且可用)它們——但是存在數據丟失風險。大多數數據庫管理員對高通信量的SQL服務器數據庫使用15分鐘的間隔,甚至更少。事務日誌備份是很重要的,因為在使用它們時,它們標記了可用於記錄新事務的非活動的VLFs。


分享到:


相關文章: