[SQL Server] 數據庫日誌文件自動增長導致連接超時的分析

轉載鏈接:http://www.cnblogs.com/qanholas/archive/2011/12/18/2291940.html

1、現象、問題描述

       客戶反映某客戶端登陸不了,客戶端程序日誌顯示“連接數據庫超時”;檢查對應的數據庫服務器,日誌顯示“Autogrow of file '某數據庫日誌文件' in database '某數據庫' was cancelled by user or timed out after 2391 milliseconds.  Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file size.”

 

2、關鍵過程分析

   根據數據庫日誌顯示,是數據庫事務日誌文件已滿,在自動增長的時候,連接會話已主動超時斷開。

1.         SQL Server需要保留以下幾種類型的日誌

a)         所有沒有經過"檢查點"的日誌記錄;(數據庫默認1分鐘左右做一次檢查點)

b)        所有沒有提交的事務所產生的日誌記錄,以及在它們之後的所有日誌記錄(佔用日誌較大空間的操作有:基於事務日誌的數據庫恢復;創建/重建索引;操作大量數據;程序打開了遊標卻未取走數據);

c)        所有要做備份的日誌記錄;(非“簡單”模式下,日誌都被認爲是需要備份的)

d)        有其他需要讀取日誌的數據庫功能模塊. (事務型複製和數據庫鏡像,在它們沒有讀取日誌之前,所有日誌均保留);

 

2.         事務日誌文件在自動增長空間時,需要將新增加的空間全部“置0”(數據文件默認不需要),期間會產生大量閂鎖並使得響應速度變慢。(設置有“超時退出”的客戶端程序,此時一般就無法正常連接;數據庫程序默認未設“超時”,所以一般會耐心等待日誌文件增長完成。)

 

3、結論、解決方案及效果

結論:問題發生前,事務日誌文件已經達25G,在自動增加10%空間(2.5G)的時候,遊戲程序連接時等待超時。

解決方法爲:

定期清空不需要備份的事務日誌(建議在“完全備份/差異備份”執行之前清空日誌);

BACKUP LOG 數據庫名 WITH WITH NO_LOG

或者將數據庫選項設爲“簡單模式”(SQL 2008僅支持該方法,不支持手動清空日誌)

4、經驗總結、預防措施和規範建議

數據庫的自動增長,建議設定爲“**MB”,減少使用“**%”;

對不需要備份日誌的數據庫,在備份數據庫前清空日誌,或定期清空;

將每週“日誌增長大小”監控,改爲每日“日誌當前大小及使用率”監控,超過(“5GB和80%時報警”);

5、備註

參考 http://support.microsoft.com/default.aspx?scid=kb;en-us;2091024&sd=rss&spid=2855

http://msdn.microsoft.com/en-us/library/ms175935.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章