KB4488809 - FIX: Penegasan terjadi ketika kueri paralel menghapus dari tabel Filestream di SQL Server 2014, 2016 dan 2017

Berlaku Untuk
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)

Gejala

Pertimbangkan skenario berikut:

  • Anda memiliki tabel Filestream yang sangat besar.
  • Anda menjalankan kueri penghapusan baris dalam tabel Filestream yang membuat paket kueri yang mahal, seperti kueri yang difilter oleh gabungan dalam ke tabel besar lain dalam sistem.
  • Pengoptimal kueri memilih rencana eksekusi paralel.

Dalam skenario ini, penegasan akan terjadi, dan Anda mungkin menerima pesan kesalahan yang menyerupai berikut ini dalam log kesalahan SQL Server:

DateTimespidNumber Error: 5553, Keparahan: 20, State: 6.

SpidSpidNumber DateTime SQL Server kesalahan internal. Manajer FILESTREAM tidak dapat melanjutkan dengan perintah saat ini.
      

Status

Microsoft telah mengonfirmasi bahwa ini adalah masalah dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".

Resolusi

Masalah ini telah diperbaiki dalam pembaruan kumulatif berikut untuk SQL Server:

Tentang pembaruan kumulatif untuk SQL Server:

Setiap pembaruan kumulatif baru untuk SQL Server berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan pembaruan kumulatif sebelumnya. Lihat pembaruan kumulatif terbaru untuk SQL Server:

Solusi

Untuk mengatasi masalah ini, Anda bisa menggunakan metode berikut ini:

Pindahkan kueri gabungan dalam ke pernyataan terpisah dan simpan hasilnya ke tabel sementara. Lalu jalankan kueri penghapusan yang difilter oleh entri dalam tabel sementara. Selain itu, Anda bisa meningkatkan ambang biaya untuk paralelisme untuk memaksa pengoptimal membuat serialisasi rencana kueri.

Misalnya:

SELECT RefTable.Alias INTO #T FROM DB.dbo.OuterTable INNER JOIN DB.dbo.RefTable ON RefTable.Alias = OuterTable.Alias

WHERE OuterTable.Alias > 30006 AND OuterTable.Alias < 30010

HAPUS DARI DB.dbo. [Tabel] WHERE Alias IN (SELECT * FROM #T)

Referensi

Pelajari tentang terminologi yang digunakan Microsoft untuk menjelaskan pembaruan perangkat lunak.