溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何解決SQL SERVER Always on 生產(chǎn)故障問題

發(fā)布時間:2021-12-06 11:25:02 來源:億速云 閱讀:386 作者:柒染 欄目:大數(shù)據(jù)

如何解決SQL SERVER  Always on 生產(chǎn)故障問題,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

最近忙的要死,手底下各種優(yōu)化,數(shù)據(jù)庫系統(tǒng),各種問題,恨不得長上8只手干這些活,而偏偏屋漏偏逢連夜雨,SQL SERVER  ALWAYS ON  又出了問題,SQL SERVER 目前公司使用的是 WINDOWS 2016 ENTERPRISE +  SQL SERVER 2016 ENTERPRISE ALWAYS ON 的集群,來支撐公司部分業(yè)務(wù)。

如何解決SQL SERVER  Always on 生產(chǎn)故障問題

SQL SERVER ALWAYS ON 作為成熟的SQL SERVER 集群解決方案已經(jīng)在很多企業(yè)中應(yīng)用,但任何系統(tǒng)都不是完美的,故障也是有的,這兩天運維的同事和我說,SQL SERVER  ALWAYS ON  的日志不在截取,瘋狂的增長。 其實我聽到這個消息后,并不緊張,因為以前我供職的某家公司,使用的SQL SERVER 2012 也有這樣的問題,最后雖然沒有找到根本原因,但問題是解決了。 

OK ,我們先看看SQL SERVER 的日志,SQL SERVER 的日志文件是LDF,對于外行來說,它就是一個文件,但實際上,對DBA來說他是一個可循環(huán)的 capped collection (此概念為MONGODB的一個概念,這里引用一下雖然不完全相同,但意思是這個意思)。

下面就是 一個LDF 的文件結(jié)構(gòu),每個文件里面有 多個 VLF 塊,而這些塊時可以復(fù)用的,也就是當(dāng) CHECK POINT 將 dirty data  FLUSH 到數(shù)據(jù)文件后,其實這些LOG 在某些層面上已經(jīng)對數(shù)據(jù)庫沒有太大意義,是可以被DUMP掉的。

如何解決SQL SERVER  Always on 生產(chǎn)故障問題

但為什么有時候,日志不能被截斷,并且日志不能被reuse 

1  VLF 塊中有沒有被 CHECK POINT 的日志 ,也就是活動日志,例如一個大事務(wù),一直沒有做完,那么這個VLF的文件塊時不會被覆蓋的,直到數(shù)據(jù)刷到數(shù)據(jù)文件后,才可以被CHECK POINT ,這個VLF 才可以被重用

2 VLF 的尾部必須是 FREE  VLF ,如果碰巧你的 有 4個 VLF 而恰巧  TAIL 和 HEAD  在一個 VLF 中,那這樣的日志也是不能被收縮的,除非數(shù)據(jù)寫到VLF1 ,舉個例子,如果有一個壁虎,如果讓他釋放自己的空間,你說他是愿意從頭砍下去,還是從尾部砍下去。所以下面的情況也是不能收縮日志。

如何解決SQL SERVER  Always on 生產(chǎn)故障問題

另外我們還要明白,收縮日志有沒有必要,在我看來,還好,因為日志如果漲到800G (不是因為錯誤,或者各種爛 DML)造成的,那就可以不釋放,因為他會REUSE 空間的,你SHRINK他后,早晚還是要占用空間,而且和系統(tǒng)交換空間也有損耗,干嘛呢。

如果你想看你的日志文件到底什么狀態(tài),鍵入 dbcc loginfo 就可以知道了,狀態(tài)為 2的 是激活的,不可以SHRINK的文件

如何解決SQL SERVER  Always on 生產(chǎn)故障問題

我們回到為什么日志不能被截取,其實這個說法不準確,應(yīng)該是問日志為什么一直在激活的狀態(tài),而不能背釋放,在我們這次故障中,明顯就是 ALWAYS ON 的日志沒有在從庫上被應(yīng)用完畢。造成的問題

查詢數(shù)據(jù)庫一直是在 AVALIABILITY_REPLCA 的狀態(tài),一般這樣狀態(tài)都是因為從庫有問題造成,例如從庫宕機,從庫由于查詢(一般從庫查詢,都是大查詢,OLAP的需求),造成日志無法應(yīng)用,或者一些稀奇古怪的問題。

如何解決SQL SERVER  Always on 生產(chǎn)故障問題

這里的經(jīng)驗我們要重新啟動從庫即可,另外在從庫的錯誤日志中我發(fā)現(xiàn)了

下面的錯誤日志:

Error: 19432, Severity: 16, State: 0. Always On Availability Groups transport has detected a missing log block for availability database "database_name". LSN of last applied log block is (xxxx:xxxxxxx:x). Log scan will be restarted to fix the issue. This is an informational message only. No user action is required.

按照微軟官方的 FIX (微軟官方對錯誤的解釋和解決)

如何解決SQL SERVER  Always on 生產(chǎn)故障問題

我們需要打上 SQL SERVER 2016 SP1  SP2的補丁來解決問題。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI