KB4013128 - 修复:当 SQLCLR UDT 用作 SQL RPC 调用的存储过程参数时,性能下降和 CLR_AUTO_EVENT 和 CMEMTHREAD 等待时间过长

应用对象
SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Enterprise Core SQL Server 2012 Standard SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

症状

您使用 Microsoft SQL Server 2012、2014 或 2016,并SQL Server使用公共语言运行时 (SQL CLR) 集成创建用户定义 (类型 UDT) 。

如果将 UDT 用作存储过程参数,则该参数将通过远程过程调用 (RPC) 机制传递到服务器。 此机制在内部尝试在内存中加载托管 UDT 的程序集。

在这种情况下,可能会遇到存储过程执行性能下降的情况。 发生这种情况是因为 RPC 不必要地加载和卸载 SQLCLR 程序集时会导致效率低下。

此问题表现为 CLR_AUTO_EVENT 和 CMEMTHREAD 类型的等待时间过长。 如果多个并发用户运行同一个存储过程,尤其如此。

解决方法

SQL Server 的 Service Pack 信息

此更新已在 SQL Server 的以下 Service Pack 中修复:

适用于 SQL Server 2016 的 Service Pack 2

适用于 SQL Server 2014 的 Service Pack 3

适用于 SQL Server 2012 的 Service Pack 4

关于 SQL Server 的 Service Pack:

Service Pack 具有累积性。 每个新 Service Pack 除了包含所有新修复程序外,还包含以前 Service Pack 中的所有修复程序。 建议应用最新的 Service Pack 和该 Service Pack 的最新累积更新。 在安装最新的 Service Pack 之前,不需要安装以前的 Service Pack。 使用以下文章中的表 1 查找有关最新 Service Pack 和最新累积更新的详细信息。

如何确定 SQL Server 及其组件的版本、版本类别和更新级别

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

参考资料

了解 Microsoft 用于描述软件更新的术语。