徵狀
當您在 Microsoft SQL Server 2012 或 Microsoft SQL Server 2014 中使用 [空間] 資料類型及相關的方法時,SQL Server 作業系統(SQLOS)排程器的量程目標會受到 SQL Server CLR 主機層級的保護。 這種保護涉及搶先式 SQLOS 切換,可能會增加 CPU 使用量。 搶先切換的理由是保護 SQLOS 排程程式。 呼叫 SQL Server CLR 的實現可能需要未指定的時間,而不會產生 SQLOS 排程程式或變更行為與併發模式。 因此,空間資料類型是設計來在每次調用期間切換搶先式。 注意: [空間] 資料類型是以 SQL Server CLR 為基礎,它可能會遇到各種層級的 .NET 記憶體佔用與執行緒切換行為。
原因
[空間] 資料類型方法的執行通常是 sub 毫秒,可能不需要完整的 SQL OS 調度程式和搶先式保護。 切換到與從搶先模式切換的負荷,可能比執行空間方法本身大很多。
解決方案
這個修正程式引入 [追蹤標記 6531],向 SQLOS 的託管層指示空間資料類型應該避免搶先式保護。 這樣可以減少 CPU 使用量,改善空間活動的整體效能。 只要個別、空間方法調用(每列和欄)都不超過 ~ 4ms,就只使用這個追蹤標誌。 沒有搶先式保護的較長的調用可能會造成排程者併發問題,以及記錄到錯誤記錄的 SQLCLR punishment 訊息。此問題最初是在 SQL Server 的後續累積更新中修正。
SQL Server 2012 SP2 累積更新4 /en-us/help/3007556
SQL Server 2014 累積更新5 /en-us/help/3011055
SQL Server 2012 SP1 累計更新13 /en-us/help/3002044
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:
狀態
Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。