KB4013128 - 修正:將 SQLCLR UDT 用作 SQL RPC 呼叫的預存程序參數時,效能降低並長時間等待 CLR_AUTO_EVENT 和 CMEMTHREAD

Applies To
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 用來說明軟體更新的術語。