SQL Server 事务日志备份非常大

SQL Server 事务日志备份非常大

在 SQL Server 2008 R2 中,我有一个数据库,该数据库每晚进行一次完整备份,每十分钟进行一次事务日志备份。该数据库处于完整恢复模式。

问题是事务日志的备份文件有数百兆字节大小,但绝对不应该如此。数据库中根本没有那么多活动。每次备份只有十分钟。它们太大了,几天后就会完全填满硬盘。

知道是什么原因导致备份如此之大以及如何解决吗?

答案1

为了明确我们的观点一致,你是说每个日志备份有数百 MB,但日志文件 (LDF) 并不大。后者通常由日志被复制、镜像、被遗忘的活动用户事务或其他任何原因固定(如中所述)来解释。sys.databases.log_reuse_wait_desc。但是,我知道情况并非如此。如果每 10 分钟进行的日志备份都有数百 MB,那么这意味着过去 10 分钟内一定发生了数百 MB 的活动。也许有一些活动一直在进行,而你却不知道?

当然,我假设您不使用WITH NO_TRUNCATEWITH COPY_ONLY语法来执行日志备份任务。

以下 3 个查询应该可以让您了解日志中的内容:

use [<myproblemdb>];
go

select count(*) as CountLogRecords, 
    sum([Log Record Length]) [Total Log Length]
from fn_dblog(null, null);

select count(*) as CountTransactionRecords, 
    sum([Log Record Length]) [Transaction Log Length],
    [Transaction ID]
from fn_dblog(null, null)
group by [Transaction ID]
order by 2 desc;

select count(*) as CountLogOperations,
    sum ([Log Record Length]) as [Operation Log Length],
    [Operation]
from fn_dblog(null, null)
group by [Operation]    
order by 2 desc;

答案2

备份前事务日志文件中有多少数据?您可以使用 DBCC LOGINFO 或通过查看 SQL Server Management Studio 中的磁盘空间报告来查看。日志备份有多大?

答案3

您的 VLF 可能太多。运行 DBCC LOGINFO 并查看返回了多少行。如果数量很多,请考虑缩小数据库的事务日志并将其一步扩展到合适的大小。

相关内容