症狀
請考慮以下案例:
你有一個儲存程序在 Microsoft SQL Server 中建立一個暫存資料表。
你執行一個查詢,該查詢由儲存程序發出,且該查詢符合以下條件:
- 查詢會參考由儲存程序建立的臨時資料表。
- 查詢有一個 WHERE 子句,但不被任何索引涵蓋,且缺少索引的功能是啟用的。
假設儲存程序是同時從多個實例呼叫的。 接著臨時資料表會頻繁建立與丟棄,導致對應索引的頻繁建立與刪除。
在這種情況下,如果對儲存程序的待查詢被取消,你可能會收到存取違規錯誤。
解決方式
此問題已在以下 SQL Server 的累積更新中得到修正:
Cumulative Update 2 for SQL Server 2017
Cumulative Update 6 for SQL Server 2016 SP1
Cumulative Update 8 for SQL Server 2014 SP2
關於 SQL Server 的累積更新:
每次新的 SQL Server 累積更新都包含了之前累積更新中包含的所有熱修補與安全修補。 請查看 SQL Server 的最新累積更新:
因應措施
解決這個問題的方法是啟用 TF () 2392 的追蹤標誌,這樣可以抑制遺失索引的收集。
更多資訊
欲了解更多關於缺失索引功能的資訊,請參考以下連結:
狀態
Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。
參考資料
了解 Microsoft 用來說明軟體更新的術語。