【问题标题】:LDF file continues to grow very large during transaction phase - SQL Server 2005LDF 文件在事务阶段继续增长非常大 - SQL Server 2005
【发布时间】:2013-07-12 17:56:28
【问题描述】:

我们有 6 个步骤,将表从一个数据库复制到另一个数据库。每一步都在执行一个存储过程。

  1. 从目标数据库中删除表
  2. 在目标数据库中创建表
  3. 复制前收缩数据库日志
  4. 将表从源复制到目标
  5. 收缩数据库日志
  6. 备份目标数据库

在第 4 步中,我们的事务日志(ldf 文件)变得非常大,以至于我们现在必须不断增加 sql server 上的最大大小,并且很快(在很远的将来)我们相信它可能会吃掉所有我们服务器上的资源。建议在我们的脚本中,我们提交每个事务,而不是等到最后才提交事务。

有什么建议吗?

【问题讨论】:

标签: sql sql-server-2005 logging transaction-log ldf


【解决方案1】:

我会假设您正在移动大量数据。此问题的典型解决方案是将副本分解为较少的行数。这使事务日志的命中率更小。我认为这将是首选答案。

我看到的另一个答案是使用批量复制,它将数据写入文本文件并使用批量复制将其导入目标数据库。我看过很多推荐这个的帖子。我没试过。

如果目标表的架构没有改变,您能否不只是截断目标表中的数据而不是删除并重新创建?

【讨论】:

  • 感谢您的回复。我们还没有想到这一点,但在考虑它时,是截断数据而不是丢弃它,节省空间吗?
【解决方案2】:

您能否将此过程的数据库恢复模式更改为Bulk Logged

然后,不要在目的地创建空表,而是执行 SELECT INTO 来创建它们。构建完成后,更改表以添加索引和约束。像这样进行批量复制将大大降低您的日志记录要求。

【讨论】:

  • 感谢您的回复。批量日志记录是我们在讨论中确实滑过的东西,但不确定作为我们部门的日志记录最佳实践以及哪些数据真正重要。
  • 批量记录模式和完整记录之间的区别真的很小。请参阅此讨论social.msdn.microsoft.com/Forums/sqlserver/en-US/…
  • 这就是我推荐使用 SELECT INTO 的原因,因为它是模式之间存在差异的少数命令之一。在投票之前阅读整个答案。
猜你喜欢
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多