數據庫錯誤日志惹的禍


前天接到同事電話:SQL服務器磁盤空間爆滿導致數據庫無法訪問。遠程到服務器上,發現原來是SQL錯誤日志文件惹的禍,數據庫在1秒內產生上100M大小的日志,沒多長時間就將磁盤空間堵滿了。

SQL錯誤日志記錄了數據庫運行過程的遇到的各種問題及一些重要信息,作為排錯需要,我們通常都不會主動去清理這些日志文件,只有每次重啟服務器時,SQL會自動刪除時間最老的日志文件,並新生成一個日志文件。

通過在服務器上查看數據庫的日志文件,發現存在大量的query notification dialog的信息,而且出現的頻率非常的高,導致日志文件增大非常快。

image

 

通過google了解到這個錯誤跟service broker的消息機制由關系,可以通過使用跟蹤標記:DBCC TraceOn(4133,-1)可消除此信息。

不過現在的當務之急是如何清掉這些日志信息,最簡單的辦法就是到SQL的日志目錄中刪除這些日志文件即可,不過考慮到刪除之前需要停止SQL Server服務,可能會導致緩存中的數據丟失,因此,這不是推薦的做法。

那么正確的做法應該怎樣呢?

執行如下語句:

EXEC sp_cycle_errorlog;

每執行一次SQL會自動初始化一個日志文件,將日志的內容清空,當SQL有7個日志文件時(默認),請執行7次該操作,每次會將日志文件時間最老那個清空。

讀者不必擔心清空會消耗很長的時間,我這邊的有個日志有40G,命令執行完后,該文件立即清空了。在時間緊急的情況,這種方式尤為方便。

那么有沒有辦法設置每個日志文件的固定大小呢?

查過這方面的資料,有人說可以在注冊表中設置ErrorLogSizeInKb的大小,不過僅限於SQL2012,其他版本的數據庫設置后不生效,這個我沒有驗證過,有興趣的朋友可以一起討論下。

 

參考文檔:http://www.sqlskills.com/blogs/paul/limiting-error-log-file-size-in-sql-server-2012/

      http://support.microsoft.com/kb/2199578

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM