症狀
請考慮以下案例:
- 你有一個非常大的 Filestream 資料表。
- 你會執行檔案串流資料表中列的刪除查詢,建立昂貴的查詢計畫,例如透過內部連接到系統中另一個大型資料表來過濾。
- 查詢優化器會選擇一個平行執行計畫。
在此情境下,會發生斷言,您可能會在 SQL Server 錯誤日誌中收到類似以下錯誤訊息:
日期時間 spid 蜘蛛 數字 錯誤:5553,嚴重度:20,狀態:6。
DateTime spid SpidNumber SQL Server 內部錯誤。 FILESTREAM 管理器無法繼續執行目前的指令。
狀態
Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。
解決方式
這個問題在以下 SQL Server 的累積更新中得到修正:
關於 SQL Server 的累積更新:
每次新的 SQL Server 累積更新都包含了之前累積更新中包含的所有熱修補與安全修補。 請查看 SQL Server 的最新累積更新:
因應措施
為了解決這個問題,你可以採用以下方法:
將內部連接查詢移到獨立的陳述句,並將結果存到暫存資料表。 接著執行以暫存資料表中條目過濾的刪除查詢。 此外,你可以提高平行化的成本門檻,強制優化器序列化查詢計畫。
例如:
SELECT RefTable.Alias INTO #T FROM DB.dbo.OuterTable INNER JOIN DB.dbo.RefTable ON RefTable.Alias = OuterTable.Alias
WHERE:OuterTable.Alias > 30006 與 OuterTable.Alias < 30010
從 DB.dbo 刪除。[表格]其中 Alias 在 (中選擇 * 從 #T)
參考資料
了解 Microsoft 用來說明軟體更新的術語。