从 SQL2005 升级到 2008 SP1 后,我们突然发现在大型事务期间数据库日志文件出现不成比例的扩展。
示例:在同一个事务中向表 B 插入 7500 万行数据,从表 A 中删除相同的 7500 万行数据。总数据量约为 20GB 的 2 倍,但数据库日志文件增长到 150GB 甚至更多。
升级之前,从未在 SQL2005 中见过这种情况。
我在任何地方都找不到将此记录为 SQL2008 中的已知回归。有人也见过这个吗?
谢谢
最大限度
答案1
您始终可以使用 fn_dblog() 分析日志内容并了解增加来自何处。使用简单恢复,日志可能会翻转并且无法分析,因此出于分析目的,我建议将恢复更改为完整,对 /dev/nul ( backup database ... to disk='nul:'
) 进行虚拟完整备份并重新运行您的事务。如果可能,记下事务 ID(查看sys.dm_tran_active_transactions
) 然后查看select ... from fn_dblog(null, null) where [TransactionID] = 'xactid'
输出并查看生成了哪些类型的记录,以便您的日志增长到 150Gb。保留空间是与您相关的列。最后,如果可能的话,与 SQL 2005 上的内容进行比较。
之后,您可以将恢复模式恢复为简单模式。不过请注意,简单模式下的日志保留行为可能与完整模式下的日志保留行为不同,但如果发生这种情况,我们将在遇到这种情况时解决这个问题。
答案2
运行 SQL Server 的计算机上的事务日志意外增长或已满
这是针对 SQL 2005 的,但也可能与 2008 相关。
答案3
您的事务日志可能设置为自动增长。请关闭该设置并将日志文件设置为固定大小。
答案4
这是因为您的日志文件记录了所有内容,我建议您通过以下方式修剪数据库日志文件:收缩数据库任务。请记住在备份后执行此操作。
Tsql 来做:
USE [N2CMS]
GO
DBCC SHRINKDATABASE(N'MyDataBase', 10, TRUNCATEONLY)
根据你备份的方式,你的备份软件应该能够做到这一点