问题描述:
1,sql2005数据库,在新增或更新数据时出现超时现象,大约10分钟左右没有响应,但是查询是没有问题的。
2,用agent进行每天一次差异备份也出现了错误,已经10天左右没有进备份了。
3,数据mdf文件5G,日志log文件37.5(为什么这么大)
4,所在磁盘为NTFS格式(NTFS单文件最大为64G),剩余空间27G
5,系统日志:
unable to read local eventlog(reason:参数不正确) :可能和它没关系
sqlserver日志:(在未响应时出现)
Autogrow of file 'CardMis11_Log.ldf' in database 'CardMis11' was cancelled by the user or timed out
...
一共连续4条,每次大约超时30秒左右
问题分析:
查询资料后,因为没有使错误重现,猜测原因:
新增或更新数据时,需要写日志,而时日志文件原来分配的空间已经满了,按照日志文件默认的自动增长设置:
增量为10%,不限制文件增长,些时系统要分配37.5G*10%=3.75G,在超时(不知道多少)内,假设分配没有完成,
造成日志写入错误,数据新增或更新错误。
问题解决:
将数据库改为"简单"模式
收缩日志文件
将数据库改为"完全"模式
修改日志文件增长模式:增量为500M,不限制文件增长
未解问题:
1,日志文件如果任其增长,也会受到磁盘剩余空间限制,系统单文件大小限制。增加在不同磁盘多少日志文件。
可以进行日志备份后收缩处理。
2,为什么30秒内分配3.75G的日志空间失败
附:程序由C#开发
SqlCommand.CommandTimeout,默认为30秒