复制数据库日志文件维护

7 sql-server sql-server-2008-r2 merge-replication transactional-replication

我在涉及复制的发布者上有一个数据库(为合并和事务配置的发布)。尝试重新控制此特定数据库的日志文件(VLF 计数、大小等)。

在尝试对日志文件执行任何维护之前,我需要对复制设置做些什么(或要小心)吗?我不是复制领域的专家,找不到任何可靠的东西来指导应该采取什么措施。

编辑:这也包括在分发数据库上工作,由于某种原因根本没有配置数据保留。

Kin*_*hah 2

我首先关注数据库的自动增长设置,因为过于频繁和不正确的自动增长可能会导致大量内部日志碎片,影响任何读取事务日志文件的进程(例如复制、CDC、备份等),从而使 VLF 的数量激增。请记住,日志文件必须增长,因为它不能被零初始化,因此如果自动增长设置不合适,那么 SQL Server 必须等到自动增长事件完成。

现在,如果您使用 T-Rep,日志读取器代理将在将更改从发布者复制到分发者时读取日志,然后分发者代理会将更改分发给称为“待处理事务”的订阅者。复制更改后,日志条目将被标记为“已复制”。

当日志读取器变慢或延迟导致长时间累积“待复制”命令时,就会出现问题,并且它们将保留为活动日志的一部分,因此 VLF 无法被截断。

您可以检查 sys.databases 中的 log_reuse_wait_desc 列,该列将显示“复制”问题。

注意:合并复制和快照复制不影响事务日志大小。如果数据库包含一个或多个事务发布,则在与发布相关的所有事务都已传递到分发数据库之前,日志不会被截断。

如果日志文件增长失控,T-Rep 的常用技术是使用 sp_repldone 命令将当前在日志读取器上等待的所有日志记录标记为已复制,然后必须重新初始化订阅者。

注意:即使您尝试切换到简单恢复模型,认为它会截断日志,它也不会工作,因为简单恢复也支持复制,并且日志将无法被截断,因为日志读取器代理将需要它们来处理。

这使我们需要进行适当的日志管理- 调整日志文件的大小以支持数据库中发生的数据更改量,并经常进行日志备份,以便快速重用日志文件内的空间。

最好是监视您的事务日志以及您通常使用 PERFMON 和 DMV 进行的其他监视。

仅供参考,sys.dm_db_log_space_usage 是 SQL Server 2012 中的一个新 DMV,它将获取基本日志大小和空间信息。

参考 :