症状

请考虑以下情况:

  • 你有一个存储过程,其中包含 Microsoft SQL Server 2012 中的子存储过程。

  • 子存储过程使用表作为参数。

  • 创建临时表,然后将其作为参数传递给子存储过程。

  • 子存储过程通过使用游标对临时表运行某些查询。

在这种情况下,将发生内存泄漏,导致 SQL Server 2012 的性能下降。

解决方案

累积更新信息

SQL Server 2012 Service Pack 1 的累积更新3(SP1)

此问题的修补程序首次在累积更新3中发布。有关如何为 SQL Server 2012 SP 1 获取累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2812412 SQL Server 2012 的累积更新程序包 3 Service Pack 1注意 由于这些版本是累积的,因此每个新的修复版本都包含了以前的 SQL Server 2012 SP 1 修复版本中包含的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2772858 在发布 SQL Server 2012 Service Pack 1 之后发布的 SQL Server 2012 版本

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

更多信息

下表提供了有关产品或工具的详细信息,这些信息可自动检查 SQL Server 实例的 "症状" 部分中和评估规则的 SQL Server 版本中所描述的条件:

规则软件

规则标题

规则说明

评估规则的产品版本

System Center Advisor

在 SQL Server 2012 中对嵌套的存储过程中的临时表运行查询时,SQL Server 内存泄漏

在此 SQL Server 实例顾问检测到 SQL Server 内部版本的存在低于修复版本的内存泄漏问题。 如果你拥有包含子存储过程的存储过程,则可能会发生这种情况,该存储过程使用可进一步使用游标的临时表。 你可能会注意到 MEMORYCLERK_SQLOPTIMIZER 的 sys.dm_os_memory_clerks 和 MEMOBJ_EXECCOMPILETEMP 的 sys.dm_os_memory_objects 将非常高。有关详细信息,请参阅知识库文章。

SQL Server 2012

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。