KB4488809 - DÜZELTME: SQL Server 2014, 2016 ve 2017'de bir Filestream tablosundan paralel bir sorgu silindiğinde onaylama işlemi oluşur

Uygulandığı Öğe
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)

Belirtiler

Aşağıdaki senaryoyu ele alalım:

  • Çok büyük bir Filestream tablonuz var.
  • Filestream tablosundaki satırların silme sorgusunu çalıştırırsınız ve bu, sistemdeki başka bir büyük tabloya iç birleştirme tarafından filtrelenen bir plan gibi pahalı bir sorgu planı oluşturur.
  • Sorgu iyileştiricisi paralel bir yürütme planı seçer.

Bu senaryoda, bir onaylama gerçekleşir ve SQL ServerSQL Server hata günlüğünde aşağıdakine benzer hata iletileri alabilirsiniz:

DateTime spid SpidNumber Error: 5553, Önem Derecesi: 20, State: 6.

DateTime spid SpidNumber SQL ServerSQL Server internal error. FILESTREAM yöneticisi geçerli komutla devam edemiyor.
      

Durum

Microsoft bunun, "Şunlar için geçerlidir" bölümünde listelenen Microsoft ürünlerinde sorun olduğunu doğrulamıştır.

Çözüm

Sorun, SQL ServerSQL Server için aşağıdaki toplu güncelleştirmelerde düzeltildi:

SQL Server toplu güncelleştirmeleri hakkında:

SQL Server için her yeni toplu güncelleştirme, önceki toplu güncelleştirmeye dahil edilen tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. SQL Server için en son toplu güncelleştirmelere göz atın:

Geçici çözüm

Bu soruna geçici bir çözüm olarak aşağıdaki yöntemi kullanabilirsiniz:

İç birleşim sorgusunu ayrı bir deyime taşıma ve sonuçları geçici bir tabloya kaydetme. Ardından geçici tablodaki girdilere göre filtre uygulanan silme sorgusunu çalıştırın. Ayrıca, iyileştiriciyi sorgu planını seri hale getirmeye zorlamak için paralellik maliyet eşiğini artırabilirsiniz.

Örneğin:

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

DB.dbo'DAN SİL. [Tablo] WHERE ALIAS IN (SELECT * FROM #T)

Başvurular

Microsoft'un yazılım güncelleştirmelerini tanımlamak için kullandığı terminoloji hakkında bilgi edinin.