SQL SERVER事务日志增长过快
原文链接:https://www.jianshu.com/p/f59e41a2ea5e
https://www.modb.pro/db/42341
https://www.cnblogs.com/ajiangg/p/4397654.html
https://zhuanlan.zhihu.com/p/388206056
https://www.likecs.com/show-308535681.html#sc=841.3333129882812
问题排查过程:
1、输入查看SQL日志文件大小命令:
DBCC SQLPERF(LOGSPACE)
![](https://img2023.cnblogs.com/blog/1892002/202301/1892002-20230106113115234-2142051309.png)
检查发现日志的绝大部分都在使用中(log space used)很高,说明日志记录不能被sqlserver清除掉,需要找原因。
2、执行指令:
DBCC loginfo()
Status列就是VLF的状态,0代表reusable或者unused,2则代表active或者recoverable;只有处于reusable和unused状态时,VLF才可以通过日志截断来释放空间。
3、输入指令:
SELECT name,recovery_model_desc,log_reuse_wait,log_reuse_wait_desc
FROM sys.databases
GO
我们可以根据结果中输出的log_reuse_wait和log_reuse_wait_desc的值来查找原因。
NOTHING:当前有一个或多个可重用的虚拟日志文件;
LOG_BACKUP:意味着SQLServer等待着日志备份。要检查是否需要做日志备份。
4、使用DBCC Opentran语句,最常用的场景是数据库对象(例如表)被一个事务长久地锁住了,但是你不知道是哪一个事务锁住了数据库对象,就可以使用DBCC Opentran语句查看当前最早开启事务的SPID,如果确认该事务是因为误操作或者应用程序Bug,所以一直没有被提交或回滚,那么可以使用KILL语句强制结束该事务的SPID,从而人工干预结束事务。
以上是搜集的各种资料,也学到了对数据库的一些分析方法,我解决的办法是重新删除以前的备份计划,重新做新的计划就好了。可能是因为升级数据库导致的。