sqlserver日誌處理不當而造成的隱患 事故背景:一大早還在路上,群里陸續有人反饋系統一直報錯 “Unknown error 258”,後來查詢日誌發現錯誤日誌 第一反應是不是資料庫連接不夠用了?導致超時?但是通過sql查詢當時連接也只有40個左右,於是繼續排查問題,發現dbserver機器這段 ...
sqlserver日誌處理不當而造成的隱患
事故背景:一大早還在路上,群里陸續有人反饋系統一直報錯 “Unknown error 258”,後來查詢日誌發現錯誤日誌
第一反應是不是資料庫連接不夠用了?導致超時?但是通過sql查詢當時連接也只有40個左右,於是繼續排查問題,發現dbserver機器這段時間磁碟io操作特別的高,很不正常,詳見下圖
發現磁碟io問題,繼續查看sqlserver日誌,發現原因: “Autogrow of file 'xxxx_log' in database 'xxxx' was cancelled by user or timed out after 3398 milliseconds. Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file size.”
發現這種問題因為log日誌文件太大了一直沒有壓縮過,並且創建資料庫的時候預設選擇了10%的增量來擴大log增量文件,這樣日誌文件的10%會越來越大從而產生超時高io操作
解決方案:
1、定期清理log文件,防止log文件越來越大
1 USE [master] 2 GO 3 ALTER DATABASE 資料庫名 SET RECOVERY SIMPLE WITH NO_WAIT 4 GO 5 ALTER DATABASE 資料庫名 SET RECOVERY SIMPLE 6 GO 7 USE 資料庫名 8 GO 9 DBCC SHRINKFILE (N'資料庫名_Log' , 11, TRUNCATEONLY) 10 GO 11 USE [master] 12 GO 13 ALTER DATABASE 資料庫名 SET RECOVERY FULL WITH NO_WAIT 14 GO 15 ALTER DATABASE 資料庫名 SET RECOVERY FULL 16 GO
2、修改預設資料庫log增量10% 為 500M(看具體情況,一般夠了)