症狀
當您在 Microsoft SQL Server 2012 或 Microsoft SQL Sever 2014 中使用空間資料類型和相關聯的方法時,SQL Server作業系統 (SQLOS) 排程器的量子目標會受到 SQL Server CLR 主控層的保護。 此保護涉及先佔式,SQLOS 交換器可能會增加 CPU 耗用量。 先佔式切換的原因是為了保護 SQLOS 排程器。 呼叫 SQL Server CLR 型實作可能會花費未指定的時間,而不會讓步於 SQLOS 排程器或變更行為和並行模式。 因此,空間資料類型設計為在每次叫用期間先佔式切換。
注意:空間資料類型是以 SQL Server CLR 為基礎,可能會遇到不同層級的 .NET 記憶體耗用和執行緒切換行為。
原因
空間資料類型方法的執行速度通常為亞毫秒級,而且不需要完整的 SQL OS 排程器和先佔式保護。 切換到搶佔模式和從搶佔模式切換的額外負荷可能遠大於空間方法本身的執行。
解決方式
此修正程式引進追蹤旗標 6531,以指示 SQLOS 主控層空間資料類型應該避免先佔式保護。 這可減少 CPU 耗用量,並改善空間活動的整體效能。 只有當每列和每欄 (個別空間方法叫用時間少於 ~4 毫秒) 才使用此追蹤旗標。 若沒有先佔式保護的叫用時間較長,可能會導致排程器並行問題,以及將 SQLCLR 懲罰訊息記錄到錯誤記錄檔。
此問題已先在下列 SQL Server 累積更新中修正。
SQL Server 2012 SP2 的累積更新 4 /zh-tw/help/3007556
適用於 SQL Server 2014 的累積更新 5 /zh-tw/help/3011055
SQL Server 2012 SP1 的累積更新 13 /zh-tw/help/3002044
關於 SQL Server 的累積更新
SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 查看 SQL Server 的最新累積更新:
狀態
Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。