KB4488809 - 修正:當平行查詢在 2014、2016 及 2017 年從檔案串流SQL Server資料表刪除時,會發生斷言

套用到
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

症狀

請考慮以下案例:

  • 你有一個非常大的 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 用來說明軟體更新的術語