KB4488809 - FIX: アサーションは、2014 年、2016 年、2017 年SQL Serverの Filestream テーブルから並列クエリが削除されたときに発生します

適用先
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 テーブルがあります。
  • システム内の別の大きなテーブルへの内部結合によってフィルター処理されるクエリ プランなど、コストの高いクエリ プランを作成する Filestream テーブル内の行の削除クエリを実行します。
  • クエリ オプティマイザーは、並列実行プランを選択します。

このシナリオでは、アサーションが発生し、SQL Serverエラー ログに次のようなエラー メッセージが表示される場合があります。

DateTimespid SpidNumber エラー: 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 から削除します。[テーブル]WHERE Alias IN (SELECT * FROM #T)

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。