事故背景:一大早還在路上,羣裏陸續有人反饋系統一直報錯 「Unknown error 258」,後來查詢日誌發現錯誤日誌sql
第一反應是否是數據庫鏈接不夠用了?致使超時?可是經過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.」sqlserver
發現這種問題由於log日誌文件太大了一直沒有壓縮過,而且建立數據庫的時候默認選擇了10%的增量來擴大log增量文件,這樣日誌文件的10%會愈來愈大從而產生超時高io操做this
解決方案:spa
一、按期清理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
二、修改默認數據庫log增量10% 爲 500M(看具體狀況,通常夠了)code