在恢复数据库时,如果在 SQL Server 2005 中,SQL Server 2008年中或在 SQL Server 2008 R2 中的事务日志内的许多 Vlf 修复: 低速性能

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 2455009
Microsoft 将分发 Microsoft SQL Server 2005年、 2008年和 2008 R2 修复作为一个可下载的文件。修补程序是累积性的因为每个新版本包含的所有修补程序和了上一个 SQL Server 2005 中,2008年和 2008 R2 中包含的所有安全修补程序的修补都程序版本。
症状
请考虑以下情形:
  • 您的计算机上安装了 Microsoft SQL Server 2005年,Microsoft SQL Server 2008年或 Microsoft SQL Server 2008 R2。
  • 一个或多个数据库的完整或大容量日志记录恢复模型中。
  • 数据库事务日志文件的初始大小很小。但是,事务文件增长较大。
  • " 自动增长 事务日志文件的增量配置为较小的尺寸。例如, 自动增长 配置增量为 1 兆或 1%。或者,请使用小的手动增长提高事务日志文件。
  • 事务日志文件都以小增量增长。不久,事务日志文件都很大。

    例如,事务日志文件从一百兆字节增长到 10 千兆字节。事务日志文件就会增加 1 兆每个增长中的增量。
在这种情况下,您可能会遇到以下问题:
  • 如果有大量的工作来恢复启动数据库时,数据库恢复很慢。

    例如,事务挂起的开放是很长时间。或者,很多很小的事务的未提交时关闭 SQL Server 或重新启动。在这种情况下,长时间估计的恢复时间在分析阶段、 撤消阶段中,或在恢复阶段可能会收到错误。错误类似于以下,并记录在 SQL Server 2005 错误日志文件:
    数据库 'mydatabase' (7) 的分析已完成 0%(约 1234 秒保持)。这是信息性消息。不需要任何用户操作。
  • 如果数据库联机还原完整的数据库备份文件和其他事务日志序列时,数据库恢复很慢。

    注意 若要在还原操作期间使数据库在线,使用 与恢复 语法或 待机状态 = <options></options> 语法。
  • 数据库镜像恢复较慢的合作伙伴服务器上镜像对中。
  • 事务复制日志读取器代理程序的进度速度较慢的以下操作:
    • 发布服务器数据库的事务日志进行分析。
    • 已将一个命令添加到分发数据库中。
    • 被复制的事务。

    注意 有关详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 网站:
    949523 小"初始大小"属性的值,并自动增长设置属性的值时,才高在 SQL Server 2005 中的事务复制滞后时间
  • 创建数据库快照时,会记录许多交易记录,或者事务日志很长时间保持活动状态,则会出现性能降低。由于已运行恢复的快照和事务日志必须回滚,则会出现此问题。
  • 使用时发生运行速度慢 DBCC CHECKDB 语法创建隐藏的数据库快照具有完全恢复数据库快照运行一致性检查。
原因
因为 SQL Server 在以下操作过程通过这些 Vlf 扫描时,事务日志文件中的虚拟日志文件 (Vlf) 可能会导致性能下降,则可能出现这些问题:
  • 数据库恢复
  • 数据库镜像
  • 数据库快照
  • 数据库事务复制日志读取器活动
当数据库事务日志文件在极大的增长情况较小的步长增长时,数千到数十万个 Vlf 内部都一组事务日志 (.ldf) 文件。但是,较大的日志增长大幅度创建仅几个 Vlf 相比较。例如,几个可能少于 100 Vlf。

注意Vlf 都是部门或在内部使用的 SQL Server 事务日志文件中的段。

解决方案

累积更新信息

SQL Server 2008 R2

累积更新 6 中首次发布此问题的修补程序。有关如何为 SQL Server 2008 R2 中获取此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2489376 SQL Server 2008 R2 的累积更新包 6
注意 版本具有累积性的因为每个新修补程序版本包含的所有修补程序和修复了上一个 SQL Server 2008 R2 中包含的所有安全修复都程序的版本。我们建议您考虑将应用了最新的修补程序版本包含此修复程序。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
981356 SQL Server 2008 R2 生成 SQL Server 2008 R2 发布后发布

SQL Server 2008 Service Pack 1

此问题的修补程序首次发布的累积更新 12 为 SQL Server 2008 Service Pack 1。有关此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2467236 对于 SQL Server 2008 Service Pack 1 的累积更新包 12
注意 版本具有累积性的因为每个新修补程序版本包含的所有修补程序和修复了上一个 SQL Server 2008年中包含的所有安全修复都程序的版本。Microsoft 建议您考虑应用包含此修补程序的最新修复程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
970365 SQL Server 2008年生成在 SQL Server 2008 Service Pack 1 月发布之后发布
为特定的 SQL Server 服务包创建 Microsoft SQL Server 2008年的修复程序。必须将一个 SQL Server 2008 Service Pack 1 修补程序应用到安装的 SQL Server 2008 Service Pack 1。默认情况下,任何 SQL Server service pack 中提供的修补程序包含在下一次 SQL Server service pack。

SQL Server 2008 Service Pack 2

此问题的修补程序首次对 SQL Server 2008 Service Pack 2 发布累积更新 2 中。有关此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2467239 对于 SQL Server 2008 Service Pack 2 的累积更新包 2
注意 版本具有累积性的因为每个新修补程序版本包含的所有修补程序和修复了上一个 SQL Server 2008年中包含的所有安全修复都程序的版本。Microsoft 建议您考虑应用包含此修补程序的最新修复程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2402659 在发布 SQL Server 2008 Service Pack 2 之后发布的 SQL Server 2008 版本
为特定的 SQL Server 服务包创建 Microsoft SQL Server 2008年的修复程序。必须将一个 SQL Server 2008 Service Pack 2 的修补程序应用到安装的 SQL Server 2008 Service Pack 2。默认情况下,任何 SQL Server service pack 中提供的修补程序包含在下一次 SQL Server service pack。

SQL Server 2005 的服务包 3

此问题的修补程序首次对 SQL 服务器 2005 Service Pack 3 发布累积更新 13 中。有关此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2438344 累积更新包 13 个 SQL 服务器 2005 Service Pack 3
注意 版本具有累积性的因为每个新修补程序版本包含的所有修补程序,并附带上一个 SQL Server 2005 的所有安全修补程序的修补都程序版本。Microsoft 建议您考虑应用包含此修补程序的最新修复程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
960598 SQL Server 2005 在 SQL 服务器 2005 Service Pack 3 月发布之后发布的生成
为特定的 SQL Server 服务包创建 Microsoft SQL Server 2005年的修复程序。必须将 SQL 服务器 2005 Service Pack 3 修补程序应用到安装的 SQL 服务器 2005 Service Pack 3。默认情况下,任何 SQL Server service pack 中提供的修补程序包含在下一次 SQL Server service pack。

SQL Server 2005 Service Pack 4

此问题的修补程序首次对 SQL 服务器 2005 Service Pack 4 发布累积更新 1 中。有关此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2464079 累积更新包 1 个 SQL 服务器 2005 Service Pack 4
注意 版本具有累积性的因为每个新修补程序版本包含的所有修补程序,并附带上一个 SQL Server 2005 的所有安全修补程序的修补都程序版本。Microsoft 建议您考虑应用包含此修补程序的最新修复程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2485757 SQL Server 2005 生成 SQL 服务器 2005 Service Pack 4 发布后发布
为特定的 SQL Server 服务包创建 Microsoft SQL Server 2005年的修复程序。必须将 SQL 服务器 2005 Service Pack 4 修补程序应用到安装的 SQL 服务器 2005 Service Pack 4。默认情况下,任何 SQL Server service pack 中提供的修补程序包含在下一次 SQL Server service pack。
状态
Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。
替代方法
安装此修补程序并重新启动 SQL Server 可能会提高恢复性能。例如,性能可能会提高以下操作的安装此修补程序并重新启动 SQL Server 后:
  • 数据库恢复
  • 数据库镜像
  • 数据库快照
  • 数据库事务复制日志读取器活动

如果您无法安装此修补程序,您可以执行以下解决方法来缓解现有问题,并防止将来发生。

减轻现有问题

  • 等待还原或恢复操作完成

    如果您有非恢复数据库还原时出现性能下降或恢复数据库时,可能需要等待完成还原或恢复操作。例如,您可能会看到脱机状态或不可恢复的数据库的恢复状态在 SQL Server 管理 Studio (SSMS)。通常停止 SQL Server 提供了无止裂槽缓慢恢复,可能需要更多时间来重复相同的恢复分析阶段、 恢复阶段,或撤消阶段。
  • 避免还原事务日志序列包含数千个 Vlf

    如果您还原使用备份文件来恢复数据库时,您会遇到性能降低,则可以避免还原事务日志序列包含数千个 Vlf。标识具有大多数虚拟日志文件的备份文件记录,请使用以下语句来查看日志备份文件中的FirstLSNLastLSN列:
    还原 HEADERONLY DISK='C:\folder\file.trn 从

    您可以决定要避免还原日志备份文件。或者,您可以使用 停止在 中的语句 还原 若要避免极为凌乱的事务日志部分的命令。如果不完全还原到最新的点的日志序列在故障恢复方案中,需要的时间会发生数据丢失,SQL Server 数据库中。因为不是所有交易记录被保存,就会发生这种数据丢失。因此,没有一项业务的权衡决策。您完全可以恢复极为凌乱的事务日志。但是,此操作可能需要几个小时。或者,您可以使用 停止在 恢复停止前极为凌乱一部分日志恢复中的语句。但是,省略任何丢失的交易记录都将丢失。

    注意 没有安装此修补程序,就通常没有安全的解决方法,加速恢复重新启动 SQL Server 后。SQL Server 必须找到 Vlf 分析完成的重做事务的日志文件的列表,然后撤消未完成的事务,以完成恢复,以安全地使数据库联机。在恢复期间,安全地不能忽略事务。

防止将来发生

  • 设置数据库的自动增长的增量为合适的大小

    如果自动增长的增量的大小太小,将有多个虚拟日志文件 (Vlf),并且您可能会遇到性能降低,在 SQL Server 中。如果自动增长的增量的大小太大,使的事务日志的自动增长的查询可能需要等待很长时间才能完成的增长。因此,在 SQL Server 中可能会出现超时错误。若要解决这些问题,可以为您的数据库为合适的大小设置自动增长的增量的大小。
  • 消除了大量的) vlf 后,并使用手动的增长

    如果在事务日志中有许多 Vlf,减小事务日志的大小,并使其在高峰业务以满足需求,使用手动增长之前增加。例如,事务日志将增加回合理的平均大小或单个的手动增长中较大的增量。因此,事务日志的大小达到最高容量,并且在频繁和定期的基础上计划日志备份文件。此外,事务日志可能会被截断,并在一个周期中可重复使用事务日志 Vlf。
  • 如何缩小和手动增加事务日志

    要有太多 Vlf 的日志,请按照下列步骤收缩日志并将其再次手动增加:
    1. 如果数据库是完全或大容量日志记录恢复模型中,您必须备份事务日志被截断并重新使用允许的活动 Vlf。
      BACKUP LOG databasename TO DISK='C:\folder\log_backupfile.trn'

      有关如何通过使用 SSMS 备份事务日志文件的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 网站:有关如何备份事务日志文件使用事务处理性的 SQL 语句的详细信息,请访问下面的 MSDN 网站:
    2. 若要确定事务日志文件的逻辑名称,请运行下面的语句中的一个。
      报表 1
      exec sp_helpfile 
      语句 2
      select * from sys.sysfiles 
      若要减少到所需大小事务日志文件的大小,请使用以下代码:
      DBCC SHRINKFILE(transactionloglogicalfilename, TRUNCATEONLY) 
    3. 您可以增大为合适的大小事务日志文件。我们建议您让事务日志文件的大小增长到峰值标准大小。因此, 自动增长 避免了增量。要设置事务日志的大小,请使用数据库属性页,在 SSMS,或者使用以下 更改数据库 语法:
      MODIFY FILE ( NAME = transactionloglogicalfilenae, SIZE=newtotalsize MB) 

      有关如何增加的 SSMS 中的数据库大小的详细信息,请访问下面的 MSDN 网站:有关详细信息 改变数据库修改文件 语法,请访问下面的 MSDN 网站:
更多信息
通过查看 SQL 错误日志文件,然后通过在每个事务日志备份文件中找到的日志序列号 (LSN),您可以检查 VLF 段数量。LSNs 中的冒号符号之前的第一位数字对应的 LSN。

例如,对于 LSN 的第一个信息性消息的第一个数字为1。但是,对于 LSN 的第二个信息性消息的第一个数字是100001。在此方案中,有 100000 Vlf 都习惯的这段时间的第一条信息性消息和的第二个的信息性消息。因此,具有多个虚拟日志文件 (Vlf) 的零碎的已记录交易记录日志如下所示:

{已备份日志。数据库: mydbname、 date(time) 创建: 2010/07/08(12:36:46),第一个 LSN: 1:5068:70,最后的 LSN: 1:5108:1、 转储设备数: 1,设备信息: (文件 = 1,类型 = 磁盘: {'C:\folder\logbackup1.trn'})。这是信息性消息。不需要任何用户操作。

备份日志。数据库: mydbname、 date(time) 创建: 2010/07/08(15:36:46),第一个 LSN: 100001:5108:1,最后的 LSN: 100002:5108:1、 转储设备数: 1,设备信息: (文件 = 2,类型 = 磁盘: {'C:\folder\logbackup2.trn'})。这是信息性消息。用户不不需要任何操作。}

下表提供了有关产品或工具的自动检查所描述的"症状"一节中您的 SQL Server 的实例和版本的 SQL Server 对规则进行评估所依据的条件的详细信息。

规则软件规则标题规则说明对规则进行评估所依据的产品版本
系统中心顾问SQL Server 使用事务性复制,日志读取器代理的性能可能会受到影响,因为事务日志或数 VLF 的大小顾问检测数量多 Vlf 或者 TLOG 是否存在事务复制到此 SQL Server 实例中大小大得多。日志读取器代理的性能产生负面影响 VLF 的数量的事务日志的大小中。减小事务日志的大小和 VLF 数,来改善日志读取器代理程序。SQL Server 2008

SQL Server 2008 R2

SQL Server 2012



参考
事务日志物理体系结构的详细信息,请访问下面的 MSDN 网站: 有关日志序列号 (LSN) 的详细信息,请访问下面的 MSDN 网站: 1413 错误有关的详细信息在数据库镜像启动后,请访问下面的 MSDN 网站: 有关日志文件结构如何影响数据库恢复时间的详细信息,请访问下面的 MSDN 网站: 有关事务日志 Vlf 的详细信息,请访问下面的 MSDN 网站: 有关如何创建数据库快照的详细信息,请访问下面的 MSDN 网站:针对 SQL Server 的增量服务模式的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
935897 可从 SQL Server 团队获取增量服务模型,以提供所报告问题的修补程序。
有关命名 SQL Server 更新架构的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
822499对于 Microsoft SQL Server 软件更新程序包的新命名方案
有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684 用于描述 Microsoft 软件更新的标准术语的说明

警告:本文已自动翻译

属性

文章 ID:2455009 - 上次审阅时间:01/08/2014 04:02:00 - 修订版本: 2.0

Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise, Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems, Microsoft SQL Server 2005 Enterprise X64 Edition, Microsoft SQL Server 2005 Evaluation Edition, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Standard Edition for Small Business, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Workgroup

  • kbqfe kbfix kbexpertiseadvanced kbsurveynew kbmt KB2455009 KbMtzh
反馈