KB4488809 – RJEŠENJE: Tvrdnja se pojavljuje kada se paralelni upit izbriše iz tablice Filestream u SQL Server 2014, 2016 i 2017

Primjenjuje se na
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)

Simptomi

Razmotrite sljedeći scenarij:

  • Imate vrlo veliku tablicu bajtovnog zapisa.
  • Pokrećete upit s brisanjem redaka u tablici Filestream koji stvara skup plan upita, na primjer onaj koji se filtrira prema unutarnjem spoju s drugom velikom tablicom u sustavu.
  • Optimizator upita bira plan paralelnog izvršavanja.

U tom će se scenariju pojaviti tvrdnja i možda ćete u zapisniku pogrešaka sustava SQL Server primiti poruke o pogreškama koje sliče sljedećima:

DateTime spid Pogreška SpidBroja : 5553, Ozbiljnost: 20, Stanje: 6.

DateTime spid SpidNumber interna pogreška SQL Server. Upravitelj bajtovnog zapisa datoteke ne može nastaviti s trenutnom naredbom.
      

Status

Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku „Odnosi se na“.

Rješenje

Taj je problem riješen u sljedećim kumulativnim ažuriranjima za SQL Server:

O kumulativnim ažuriranjima za SQL Server:

Svako novo kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sigurnosne popravke koji su obuhvaćeni prethodnim kumulativnim ažuriranjem. Pogledajte najnovija kumulativna ažuriranja za SQL Server:

Zaobilazno rješenje

Da biste zaobišli taj problem, koristite sljedeću metodu:

Premjestite unutarnji upit za spajanje u zasebnu naredbu i spremite rezultate u privremenu tablicu. Zatim pokrenite upit za brisanje koji je filtriran prema unosima u privremenoj tablici. Uz to, možete povećati prag troškova za paralelizam da biste optimizator prisilili da serijalizira plan upita.

Na primjer:

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

DELETE FROM DB.dbo. [Tablica] GDJE JE PSEUDONIM (ODABERITE * IZ #T)

Reference

Saznajte više o terminologiji koju Microsoft upotrebljava za opisivanje softverskih ažuriranja.