症状
使用 SQL Server 2005 合并复制或基于 Web 同步与 SQL Server 2008年合并复制的订阅服务器。之后重复同步发生内存泄漏,在一段时间后,可能会收到"内存不足"错误。这变得显而易见了很长时间,如合并代理程序 (Replmerg.exe) 与-连续开关一起使用时不重新启动主机进程时或当连续参数应用于代理的代理程序配置文件中指定时。此外 RMO 应用程序或服务,您在中制定在一个循环中运行同步,当应用程序运行几天而不退出,可能会影响此问题。
原因
几个内部对象都在每次同步时泄漏。
解决方案
SQL Server 2005 的服务包 3
此问题的修补程序首次发布累积更新 6 中的 SQL 服务器 2005 Service Pack 3。有关此累积更新包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章 ︰
974648累计更新 SQL 服务器 2005 Service Pack 3 包 6注意:因为版本具有累积性,所以每个新修补程序版本包含的所有修补程序,并附带上一个 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 2008年的发行版
重要:如果您运行的 SQL Server 2008年的发行版,则必须安装此修复程序。
累积更新 8 中首次发布此问题的修补程序。有关如何为 SQL Server 2008 中获取此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:SQL Server 2008 年的975976累计更新程序包 8注意:因为版本具有累计性,所以每个新修补程序版本包含上一个 SQL Server 2008 修补程序版本随附的所有修补程序和所有安全修复程序。我们建议您考虑将应用包含此修复程序的最新的修补程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
SQL Server 2008年生成 SQL Server 2008年发布后发布的956909
SQL Server 2008 Service Pack 1
重要:如果您运行的 SQL Server 2008 Service Pack 1,您必须安装此修复程序。
此问题的修补程序首次发布的累积更新 5 为 SQL Server 2008 Service Pack 1。有关此累积更新包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章 ︰975977累计更新 SQL Server 2008 Service Pack 1 包 5注意:因为版本具有累计性,所以每个新修补程序版本包含上一个 SQL Server 2008 修补程序版本随附的所有修补程序和所有安全修复程序。Microsoft 建议您考虑应用包含此修复程序的最新的修补程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
SQL Server 2008年生成 SQL Server 2008 Service Pack 1 发布后发布的970365 为特定的 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 中提供的修补程序。
状态
Microsoft 已经确认这是“适用于”一节中列出的 Microsoft 产品中的问题。
解决方法
若要变通解决此问题,请使用下列方法之一:
方法 1
如果您使用合并代理程序以连续模式,定期停止合并代理进程并重新启动它。
例如,五天后,收到"内存不足"错误,合并代理安排为一项作业。然后,您可以计划新的 SQL Server 代理作业调用sp_stop_job跟sp_start_job指定您合并代理程序作业的名称,它将每隔 5 天周期受影响的进程。合并代理程序 (Replmerg.exe) 进程停止时,任何泄漏的内存中的进程内存空间将被释放。 有关用法详细信息-连续切换器在合并代理程序,请参阅下面的 Microsoft 开发人员网络 (MSDN) Web 站点︰http://msdn.microsoft.com/en-us/library/ms147839.aspx
sp_stop_job http://msdn.microsoft.com/en-us/library/ms182793(SQL.90).aspx
sp_start_job http://msdn.microsoft.com/en-us/library/ms186757(SQL.90).aspx
方法 2
如果您使用从作业合并代理程序,您可以通过使用额外的步骤,而不依靠连续参数配置作业中的手动循环逻辑。而不是一个合并代理进程内部永远不断地循环,时间安排合并代理程序作业步骤重复出现在每分钟一次如频繁的基础上。重试之间将退出该进程,这将释放任何泄漏的内存。
编辑作业,以便在片刻之间循环中重复步骤重复的合并代理程序。-
[3] 的步骤之后添加新步骤 [4]"检测无日志记录的代理程序关闭,"名为"无限重试循环"。将类型设置为 TSQL 和到命令"waitfor 延迟"0: 00:05'",这种 TSQL 延迟将提供 5 的第二个暂停它可以配置为这样一种方式合并代理程序将暂停执行之间并不会持续运行在一个轮询间隔。在高级选项卡上指定"上成功操作"为"转到逐步 [2] 运行代理程序"和"故障时的操作"为"请转到步骤 [2] 运行代理程序"
-
编辑步骤 [2] 运行代理,以确保达到循环步骤 [4]。在步骤 [2] 的高级选项卡上,设置上的成功操作,"请转到步骤: [4] 无限重试循环"并设置到"转到下一步"打开失败操作
-
编辑步骤 [3]"检测无日志记录的代理程序关闭"以确保步骤 [4] 中的循环为止。在步骤 [3] 的高级选项卡上,设置上成功操作,"转到下一步"。您还可以决定是否要步 [3] 上的失败操作设置为"转到下一步"或"退出报告失败的作业"。如果它被配置成退出,它将复制监视器和作业监视器中显示作业失败。如果将其配置在进入第四个循环步骤失败时,无限期,重新运行合并代理程序可能和无限期地记录错误。
方法 3
同样如果 RMO 应用程序用于调用MergeSynchronizationAgent.Synchronize()方法来同步订阅服务器数据库在一个循环中的,停止并重新启动进程定期释放由于此问题而泄漏的任何内存。http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.replication.mergesynchronizationagent.synchronize(SQL.90).aspx
有关此对象和方法的详细信息,请参阅下面的 Microsoft 开发人员网络 (MSDN) 的网站︰参考资料
有关如何使用的详细信息-连续开关在合并代理程序,请访问下面的 Microsoft 开发人员网络 (MSDN) Web 站点︰
http://msdn.microsoft.com/en-us/library/ms147839.aspx 有关sp_stop_job存储过程的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) Web 站点︰
http://http://msdn.microsoft.com/en-us/library/ms182793(SQL.90).aspx 有关sp_start_job存储过程的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) Web 站点︰
http://msdn.microsoft.com/en-us/library/ms186757(SQL.90).aspx 更多有关如何获取 SQL 服务器 2005 Service Pack 3 中,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章︰
913089如何获取最新的 service pack,SQL Server 2005 有关 SQL 2005 Service Pack 3 (SP3) 中的新功能以及在 SQL Server 2005 SP3 中的改进的更多信息,请访问下面的 Microsoft 网站︰
http://go.microsoft.com/fwlink/?LinkId=131442更新 SQL Server 的命名架构的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章︰
822499新命名方案为 Microsoft SQL Server 软件更新程序包 有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684用来描述 Microsoft 软件更新的标准术语的说明