01-日志文件自动增长导致数据库响应变慢的问题
一、现象
1、前台页面不能显示,报出连接数据库超时的错误,查看SQLServer数据库当前访问,发现有一个update的session非常耗时,和开发交流说每次访问页面的时候,会先更新一张表的数据,然后才能正常显示页面,查看这张表只有970条数据,没有主键和索引,查看数据库访问情况,没有其他session占用资源,也没有其他session锁这张表,然后更新了一下这张表的统计信息,就好了,业务先恢复了。
2、查看这个update语句,有inner join操作,查看这张join的表,也只有1021条数据,连接列没有索引,按理来说应该和更新统计信息没有关系。
二、问题分析
1、查看ERRORLOG日志,发现有一个错误是关于数据库的日志文件自增长的,内容如下:
Autogrow of file 'xxxx_log' in database 'xxxxx' was cancelled by user or timed out after 30124 milliseconds.
Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file size
意思就是说日志文件出现自增长操作,而响应时间比较慢,所有在ERRORLOG里做了这么一条记录
2、查看数据库的日志文件大小达到40G,而增长模式也是按10%的百分比增长,所有在事物日志自动增长机制发生时,会产生闩锁等待(LATCH_EX),造成阻塞,因此在有其他操作写入事物日志时,会进入挂起状态,直到他们获得需要的闩锁,只有在日志自动增长完成时,才能获得相应的资源,执行正常
3、在事物日志自动扩展空间时,数据库的性能是会下降的,所以事物日志增长要按MB增长。
4、对应的等待事件WRITELOG,表示正在等待写入日志,意味着写入日志可能出现了问题,或者是磁盘IO问题,或者是像我们这种情况,日志正在自动扩展,产生了锁。
三、解决办法
1、修改数据库的日志自增长模式为按MB增长。
2、添加数据库日志备份计划,定期备份数据库。
3、如果数据库日志太大的话,还需要收缩一下事物日志。
参考网址:
https://blog.csdn.net/jiankunking/article/details/48321317