症狀
當您嘗試在 Microsoft SQL Server 2012 或 SQL Server 2014 中大型資料表的空間資料類型上使用 CREATE INDEX 或 ALTER INDEX) 建立索引 (時,CMEMTHREAD 等候類型的爭用很高,且SQL Server效能會降低。
解決方式
此問題已先在下列 SQL Server 累積更新中修正。
SQL Server 2014 累積更新 1 /zh-tw/help/2931693
SQL Server 2012 SP1 的累積更新 7 /zh-tw/help/2894115
關於 SQL Server 的累積更新
SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 查看 SQL Server 的最新累積更新:
Hotfix 更新套件資訊 Microsoft 提供支援的 Hotfix。 不過,此 Hotfix 僅用來修正本文所述的問題。 僅將此 Hotfix 套用至發生此特定問題的系統。
如果 Hotfix 可供下載,本知識庫文章頂端有「Hotfix 可供下載」一節。 如果未顯示此區段,請提交要求給 Microsoft 客戶服務與支援以取得 Hotfix。
注意: 如果發生其他問題或需要進行任何疑難排解,您可能需要建立另外一個服務要求。 一般的支援費用將適用於不符合此特定 Hotfix 資格的其他支援問題和問題。 如需 Microsoft 客戶服務及支援服務的完整電話號碼清單,或建立個別的服務要求,請造訪下列 Microsoft 網站:
/contactus/?ws=support 注意:「Hotfix 下載可用」表單顯示 Hotfix 可用的語言。 如果您找不到您的語言,是因為該語言沒有 Hotfix。
更多資訊
CMEMTHREAD 等候類型指出對內部安全執行緒記憶體物件的等待。 較高層級的查詢平行處理原則可能會觸發等候,進而導致空間活動效能降低。
此修正程式會使用 NUMA 節點分割區分割與「空間記憶體物件」關聯的 CMEMTHREAD。 這會將背景工作活動並行減少為單一節點上使用中的排程器數目。 對於每個節點具有較高層級排程器的系統,追蹤旗標 –T8048 可用來進一步分割允許由排程器分割的所有記憶體物件。 請謹慎使用追蹤旗標,因為它會為所有 NUMA 節點分割記憶體物件帶來少量記憶體額外負荷。
附註:空間記憶體物件會在載入 SqlServerSpatial110.dll 載入SQL Server處理序位址空間時建立。 在大多數情況下,這需要重新啟動 SQL Server 程序,才能套用追蹤旗標效果。
CMEMTHREAD 等候類型會針對任何安全執行緒記憶體物件等待增加,而不只是空間物件。 下列 XEvent 工作階段定義及公用符號的使用,可用來識別產生 CMEMTHREAD 等候的特定程式碼行:CREATE EVENT SESSION wait_stacks
在伺服器上
新增活動sqlos.wait_info
(
action (package0.callstack)
where opcode = 1 -- wait completed
和 wait_type = 191 -- CMEMTHREAD
)
新增目標package0.asynchronous_bucketizer (SET source_type = 1, source = 'package0.callstack') ,
新增目標package0.ring_buffer (SET max_memory = 4096)
使用 (MAX_DISPATCH_LATENCY = 1 秒)
開始
ALTER EVENT session wait_stacks on Server State = Start
返
執行重現
選取event_session_address、target_name、execution_count、投射 (target_data 為 XML)
從 sys.dm_xe_session_targets xst
內部聯結sys.dm_xe_sessions xs on (xst.event_session_address = xs.address)
其中 xs.name = 'wait_stacks'
返
狀態
Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。