症状
请考虑以下情况:
-
你有一个存储过程,其中包含 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 |