徵狀
請試想下列案例:
-
您有一個資料表,其中有聚集列序索引,且資料表有許多資料行(在成百上千)。
-
這些資料行的資料(資料類型)是高度可壓縮的資料(例如Varchar)。
-
您可以針對此資料表執行 SELECT 語句來選取此資料表中的大型子集或所有資料行。
-
您的 select 語句有一個 WHERE 子句,可將它的輸出限制為非常少的資料列(查詢是極具選擇性的)。
在這種情況下,您可能會遇到下列任何一個或所有的問題:
-
併發工作負荷(在伺服器上與此查詢同時執行的其他查詢)可能會降低效能並降低輸送量。
-
您可能會看到 [間歇性高 CPU 使用量]。
-
如果您查詢 sys.dm_os_ring_buffers並查看 SchedulerMonitor 類型專案,您會發現在執行此查詢期間記錄了間歇性的「未產生排程」訊息。
-
您可能會在錯誤記錄中收到無法取得的排程程式錯誤,而且可能會產生故障記憶儲存體轉儲檔案。
解決方案
這個問題首先是在下列 SQL Server 累積更新中修正:
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 我們建議您下載並安裝最新的 SQL Server 累積更新:
其他相關資訊
修正詳細資料處理欄區段的工作流程(將其解壓縮,並針對符合資格的列進行掃描),用於在輸出特定閾值的列數時,將 CPU 使用量「產生」到其他工作人員/併發查詢執行。 當WHERE 子句為產生幾個資料列的極高選擇性時,處理此查詢的工作流程會處理未壓縮和大量的區段(因為只有極少的列資格),才能讓其他工人處理其工作。 這會導致 CPU 使用量不規律,以及併發工作負載的輸送量下降。 修正程式會針對此類列查詢優化並改善 CPU 共用演算法。
參考
瞭解 Microsoft 用於描述軟體更新的 詞彙 。