KB4488809 – POPRAVEK: Do izjave pride, ko je vzporedna poizvedba izbrisana iz tabele datotečnega toka v SQL Server 2014, 2016 in 2017

Velja za
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)

Znaki

Oglejte si ta scenarij:

  • Imate zelo veliko tabelo datotečnega toka.
  • Zaženete poizvedbo za brisanje vrstic v tabeli datotečnega toka, s čimer ustvarite drag načrt poizvedbe, kot je na primer načrt, ki je filtriran z notranjim združevanjem z drugo veliko tabelo v sistemu.
  • Optimizator poizvedbe izbere načrt vzporednega izvajanja.

V tem scenariju bo prišlo do izjave in morda boste prejeli sporočila o napakah, podobna tem v dnevniku napak strežnika SQL Server:

DateTime spid SpidNumber Error: 5553, Resnost: 20, State: 6.

DateTime: spid SpidNumber SQL Server notranja napaka. Upravitelj FILESTREAM ne more nadaljevati s trenutnim ukazom.
      

Stanje

Microsoft je potrdil, da gre za težavo v Microsoftovih izdelkih, ki so navedeni v razdelku »Velja za«.

Rešitev

Težava je odpravljena v naslednjih zbirnih posodobitvah za SQL Server:

O zbirnih posodobitvah za SQL Server:

Vsaka nova zbirna posodobitev za SQL Server vsebuje vse sprotne in varnostne popravke, ki so bili vključeni v prejšnjo zbirno posodobitev. Oglejte si najnovejše zbirne posodobitve za SQL Server:

Rešitev

Če želite odpraviti to težavo, uporabite ta način:

Premaknite notranjo poizvedbo za združevanje v ločeno izjavo in shranite rezultate v začasno tabelo. Nato zaženite poizvedbo za brisanje, ki je filtrirana po vnosih v začasni tabeli. Poleg tega lahko povečate prag stroškov za vzporednost in tako prisilite optimizator, da serializira načrt poizvedbe.

Primer:

SELECT RefTable.Alias INTO #T FROM DB.dbo.OuterTable NOTRANJI STIK DB.dbo.RefTable ON RefTable.Alias = OuterTable.Alias

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

IZBRIŠI IZ DB.dbo. [Tabela] VZDEVEK WHERE IN (IZBERITE * IZ #T)

Sklici

Preberite več o terminologiji, ki jo Microsoft uporablja za opisovanje posodobitev programske opreme.