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.