大家都知道sql server日誌檔案用來記錄事物日誌,但是sql server資料庫引擎內部將每一物理日誌檔案分成多個虛擬日誌檔案管理。而且虛擬日誌的多少回影響資料庫的效能。
虛擬日誌檔案沒有固定大小,且物理日誌檔案所包含的虛擬日誌檔案數不固定。資料庫引擎在建立或擴充套件日誌檔案時動態選擇虛擬日誌檔案的大小。
資料庫引擎嘗試維護少量的虛擬檔案. 只有當日誌檔案使用較小的 size 和 growth_increment 值定義時,虛擬日誌檔案才會影響系統效能。如果這些日誌檔案由於許多微小增量而增長到很大,則它們將具有很多虛擬日誌檔案。這會降低資料庫啟動以及日誌備份和還原操作的速度。
那是不是虛擬檔案越少越好呢?也不是。
我們知道事務日誌是一種迴繞的檔案,如果每個虛擬日誌的檔案大小為8gb,那麼只有這8gb的檔案全部變成不活動時才會被清除,這樣sql server一次就需要清除8gb的日誌,也會影響效能。
所以需要將虛擬日誌的大小維護在乙個合理的水平。這裡先看一下虛擬日誌的增長:
日誌增長值
64mb = 4vlfs
日誌增長大於
64mb
小於1gb = 8 vlfs
日誌大於
1gb = 16 vlfs
kimberly給出的建議是對於日誌檔案比較大的系統虛擬大小檔案為512m,也就是起始日誌檔案大小為4gb(16個vlf),然後每次以4gb的速度增長,這樣可以提高效能。
使用dbcc loginfo可以檢視vlf的數量:
這裡我建立allentest資料庫,ldf檔案大小為24mb,可以看到初始為4個vlf檔案,活動的vlf檔案1(status=2)。建立一張表執行下面的語句使日誌增長,可以看到已經變成2個活動的vlf:
create
table test(namevarchar
(20))
insert
into testvalues
('allentest')
go 100000
備份log檔案後檢視vlf的狀態:
backup
logallentestto
disk
='d:\mssql\allentest.trn'
可以看到第乙個vlf檔案已經變為可用狀態了,但是第二個vlf檔案因為沒有被寫滿所以繼續使用。
更多資訊可以參考:
事務日誌物理體系結構
縮小SQL SERVER日誌檔案
sql server 2000 會有日誌檔案由於時間的積累越來越大的問題 資料庫實際大小為15m,日誌檔案實際大小為625kb 匯出的日誌檔案 但日誌檔案實際占用空間為200mb 預設設定是檔案日誌會自動增長 如果想在資料庫屬性那裡,直接將當前的日誌檔案的儲存空間改小,是不行的。解決方法 找到下面的...
縮小SQL SERVER日誌檔案
sql server 2000 會有日誌檔案由於時間的積累越來越大的問題 資料庫實際大小為15m,日誌檔案實際大小為625kb 匯出的日誌檔案 但日誌檔案實際占用空間為200mb 預設設定是檔案日誌會自動增長 如果想在資料庫屬性那裡,直接將當前的日誌檔案的儲存空間改小,是不行的。解決方法 找到下面的...
縮小SQL SERVER日誌檔案
sql server 2000 會有日誌檔案由於時間的積累越來越大的問題 資料庫實際大小為15m,日誌檔案實際大小為625kb 匯出的日誌檔案 但日誌檔案實際占用空間為200mb 預設設定是檔案日誌會自動增長 如果想在資料庫屬性那裡,直接將當前的日誌檔案的儲存空間改小,是不行的。解決方法 找到下面的...