前言:對於log日誌檔案,相信大家都應該非常的熟悉了,log日誌檔案的優化是效能調優和故障排除中的乙個老大難。
在優化的過程中,常常有人說」把log日誌放在單獨的磁碟上面,並且將其自動增長禁止,並且把大小設定的和磁碟大小接近,可以提高效能「,確實,這句話看起來很對,但是最後發現似乎又不太對。
通過研究和學習,也看了一些國外社群的文章,發布此文。
一般而言,我們都沒有必要去關心事務日誌中的虛擬日誌檔案的個數。這裡提到的「虛擬日誌檔案」的概念,我們後面會進行專門的講述。很多的時候,我們在建立資料庫的時候,都採用了它的預設配置,即:將日誌的增長方式設定為「自動增長」,這樣會直接導致乙個後果就是「檔案碎片」,從而直接導致整個資料庫的效能嚴重下降。那麼,如何避免這種情況?如何識別碎片問題?如何解決問題?這就是我們本篇文章要講述的內容了。
首先,我們來看看什麼是「虛擬日誌檔案」。
我們知道,在正常的資料庫操作中,
sql server
會以順序的方式去寫日誌檔案,記錄
dll和
dml的操作的詳細資訊。每乙個日誌記錄都有乙個與之相關的邏輯序列號(
lsn)。這些
lsn處於不斷增長的狀態,這就是說
lsn2
的日誌記錄所代表的操作在
lsn1
之後進行。並且最近新增的日誌記錄的
lsn號碼最大。
在sql server
內部,sql server
將日誌檔案的空間劃分為很多不同的「塊」,也稱之為「虛擬日誌檔案」(
vlf)。看看到下面的乙個圖:
sql server
首先將會把事務的詳細資訊記錄到第乙個可用的
vlf中,此時也就是寫到
vlf1
中。並且,在寫的過程中,日誌記錄是按照順序寫入的,也就是說首先會寫滿
vlf1
,然後寫
vlf2
,以此類推。如果最後全部的
vlf都寫滿了之後,日誌會迴圈寫入,也就說,日誌會再在寫入
vlf1
中,將vlf1
中之前的日誌記錄覆蓋,當然,這個寫入是有條件的,即:只有在
vlf1
是可重用的情況下才能寫入。
到這裡,大家可能會有很多的問題,其中乙個就是:如何知道
vlf1
現在是否可被重用。先不急,接著看。
上面的圖描述了乙個簡單的場景:乙個事務t1,
t3已經提交,而t2,
t4處於執行狀態,並且在
lsn10
的地方執行乙個
checkpoint
操作。現在我們的有4個
vlf檔案,每乙個
vlf中都包含了
4個事物日誌記錄。這些日誌記錄包含了四個事務的詳細資訊。在圖中,
lsn1
表明這個事務
t1開始的點,
lsn2
記錄t1
事務執行的乙個
update
操作的詳細資訊,
lsn3
記錄了t1
事務執行了
commit
操作,lsn4
,又是另外乙個事務
t2開始的點,以此類推。
注意:完全可以存在乙個事務的日誌記錄跨越多個
vlf,道理很簡單,大家自己想想
。從上面的圖中可以看出,現在存在
2個活動的事務(t2,
t4)。而
lsn4
是最先活動事務
t2的開始點。
在圖中還有乙個所謂的
minlsn
,就是最先開始的一條活動的日誌記錄。執行
checkpoint
的地方是
maxlsn
,就是活動日誌最後的點,因為後面還沒有寫入新的日誌記錄。其實所謂的活動日誌,主要是因為這些日誌有可能被用來執行回滾操作。
在這裡朋友們可能就要問了:在上圖中,t3
中的事務不是已經提交了嗎,應該不屬於活動日誌啊
?確實,原本應該是這樣的,但是在
t3之後,又開始了
t4,而且還沒有提交,從而使得
t3處於沒有提交的事務t2和
t4之間,導致這一連串的都成為「活動的「。我們再把問題延伸一下:如果在
lsn10
後面又開始了新的事務,而且
t2事務還沒有提交,那麼會導致活動日誌的範圍變得更大。所以希望這裡大家可以明白我的意思。
包含有活動日誌的
vlf就是處於活動的狀態,圖中的
vlf1-3
都是活動的,如果
vlf是活動的,那麼就不能被重用。什麼意思呢?
我們現在試想一下:如果
t2事務一直提交,而新的事務不斷的在開啟,那麼最後的結果就是
vlf1-4
中都包含活動日誌,使得所以的
vlf都是活動的,如果
vlf4
已經空間寫完,此時資料庫發現它不能迴圈的寫入,即不能再從
vlf1
開始寫,因為
vlf1
是活動的,這個時候,資料庫就分配新的空間,分配新的
vlf,然後再寫入。試想,如果總是這樣,那麼,勢必會導致檔案碎片。所以這也是為什麼避免事務執行時間過長的原因之一。
在上圖中,此時活動日誌包含在
vlf4
中,而vlf1-3
都是非活動的
,所以如果日誌不斷寫入導致
vfl4
寫滿,此時日誌會再次寫入
vlf1
,然後是
vlf2
,以此類推!
今天就到這,明天開始講述與日誌相關的效能與設定問題。
【資料庫事務日誌碎片原理分析與方案】-深入解析篇
負載均衡詳解第一篇:負載均衡的需求.pdf
C 資料庫事務原理
隔離級別的概念 企業級的資料庫每一秒鐘都可能應付成千上萬的併發訪問,因而帶來了併發控制的問題。由資料庫理論可知,由於併發訪問,在不可預料的時刻可能引發如下幾個可以預料的問題 髒讀 包含未提交資料的讀取。例如,事務1 更改了某行。事務2 在事務1 提交更改之前讀取已更改的行。如果事務1 回滾更改,則事...
資料庫事務隔離級別與實現原理
1 原子性 atomic 指的是事物所有的操作要麼全做 要麼全不做。2 一致性 consistency 事物應該確認資料庫從乙個一致狀態轉變為另乙個一致狀態。資料庫中的資料應滿足完整性約束 3 隔離性 isolation 指的是多個事物併發執行的時候 乙個事物的執行不應當影響到其它的事物 即事物與事...
檢視資料庫事務日誌檔案
dbcc log type 引數 dbid or dbname 任一資料庫的id或名字 type 輸出結果的型別 0 最少資訊 operation,context,transaction id 1 更多資訊 plus flags,tags,row length 2 非常詳細的資訊 plus obje...