欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sqlserver日志处理不当而造成的隐患

程序员文章站 2023-08-30 23:40:20
sqlserver日志处理不当而造成的隐患 事故背景:一大早还在路上,群里陆续有人反馈系统一直报错 “Unknown error 258”,后来查询日志发现错误日志 第一反应是不是数据库连接不够用了?导致超时?但是通过sql查询当时连接也只有40个左右,于是继续排查问题,发现dbserver机器这段 ......

sqlserver日志处理不当而造成的隐患

 

事故背景:一大早还在路上,群里陆续有人反馈系统一直报错 “unknown error 258”,后来查询日志发现错误日志

       sqlserver日志处理不当而造成的隐患

 

第一反应是不是数据库连接不够用了?导致超时?但是通过sql查询当时连接也只有40个左右,于是继续排查问题,发现dbserver机器这段时间磁盘io操作特别的高,很不正常,详见下图

 

    sqlserver日志处理不当而造成的隐患

 

 

发现磁盘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操作

解决方案:

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(看具体情况,一般够了)

 

sqlserver日志处理不当而造成的隐患