前幾天資料庫伺服器,突然掉了,造成其提供資料的兩個web也中斷服務。
現象:
1、電腦運行緩慢,幾乎不能操縱
2、此資料來源支援的web程式已down,暴露出來的Error:獲得連線逾時。
3、本地串連資料庫沒有問題,但是本地的Web程式居然獲得不了資料連線
4、CPU利用率、記憶體佔用並不高
系統出現當機的可能性很多,造成了確定原因很困難。只能地毯式搜尋。
1、系統已經進行了全面的查毒、查木馬操作,沒有發現可疑檔案,系統補丁也及時進行修複,被人掛馬的可能性不大。
根據系統的LOG進行排查:
2、遠程登入載入的程式錯誤。儘管爆出多次錯誤,但不致於資料庫連接中斷。同樣出現類似問題的其它機器並未出現當機
3、日誌自動成長逾時,這個可能性很大。在兩次系統當機前,這個Error曝出的最多,而且系統正常之後,此類ErrorLog消失
錯誤資訊:
------------------------------------------------------------------------
事件類型: 資訊
事件來源: MSSQLSERVER
事件種類: (2)
事件 ID: 5144
日期: 2009-3-3
事件: 11:57:18
使用者: N/A
描述:
資料庫 'databaseName' 中的檔案 'databaseName_log' 的自動成長已由使用者取消,或已在 30687 毫秒後逾時。請使用 ALTER DATABASE 為此檔案設定較小的 FILEGROWTH 值,或顯式設定新的檔案大小。
有關更多資訊,請參閱在 http://go.microsoft.com/fwlink/events.asp 的說明及支援中心。
---------------------------------------------------------------------------
原因分析:
預設SQL Server 在資料庫檔案滿了後,是自動增加原資料庫檔案的10%大小,用來繼續使用。還有記錄檔,同樣如此。假如你的資料庫檔案很大了,檔案再增加10%,將會是一種較大的負擔。
經查詢,其中一資料庫的記錄檔已經有2.37GB之多,如果增加10%,就要增加超過200MB,需要較長的時間時間來完成,這種操作很可能逾時。然後其它的插入、更新、查詢操作產生連鎖反應。而且,還有定時器,在不斷進行資料訪問,如果出現逾時,則很有可能出現死結,致使w3wp.exe進程中線程數明顯增加。
如果資料庫在事務中進行更新操作時,而恰巧此時,日誌空間不足,需要增加10%的日誌空間,而資料庫事務執行逾時時間預設為30秒,這時如果操作逾時,事務將進行復原,此時,其它的資料庫操作會產生連鎖反應,形成阻塞。
小型實驗:為了證明這個問題,簡單做了一個小例子,設定:日誌滿後自動增加1G的空間。結果,也出現了此類錯誤,而且在此期間,不能對資料庫進行任何操作。
MSDN介紹:
如果您啟動並執行事務需要的日誌空間大於可用空間,並且您已經為該資料庫的交易記錄開啟自動成長選項,則在完成事務所花費的時間中,有一部分是交易記錄按配置量增長所花費的時間。如果該增長量很大,或者有其他因素導致時間延長,則您在其中開啟事務的查詢可能因逾時錯誤而失敗。資料庫的資料部分的自動成長可能會造成此類問題。
http://support.microsoft.com/kb/315512/zh-cn
解決方案:將檔案增長設定為一個更低的百分比或者直接指定增加多少MB。
認真查閱了一些資料,在網路中也得到幾位同病者的提供的分析結果,基本已經確定了問題的所在。