KB4488809 - FIX: Kinnitus ilmneb, kui paralleelne päring kustutab Filestream tabelist SQL Server 2014, 2016 ja 2017

Rakenduskoht
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)

Sümptomid

Vaatame järgmist näidet.

  • Teil on väga suur Filestreami tabel.
  • Käivitate ridade kustutuspäringu Filestreami tabelis, mis loob kuluka päringuplaani, näiteks sellise, mida filtreerib süsteemis sisemine ühendamine teise suure tabeliga.
  • Päringu optimeerija valib paralleelse käivitamisplaani.

Selle stsenaariumi puhul ilmneb kinnitus ja võidakse kuvada tõrketeated, mis sarnanevad SQL Server tõrkelogis järgmisega:

DateTimespid SpidNumber Tõrge: 5553, raskusaste: 20, olek: 6.

DateTimespid SpidNumber SQL Server sisemine tõrge. FILESTREAMi haldur ei saa praeguse käsuga jätkata.
      

Olek

Microsoft on kinnitanud, et see on jaotises „Rakenduskoht“ loetletud Microsofti toodete korral esinev probleem.

Lahendus

Probleem on lahendatud järgmistes SQL Server koondvärskendustes.

Teave SQL Server koondvärskenduste kohta.

Iga uus koondvärskendus SQL Server sisaldab kõiki kiirparandusi ja kõiki turbeparandusi, mis olid kaasatud eelmise koondvärskenduse. Vaadake uusimaid SQL Server koondvärskendusi.

Ajutine lahendus

Selle probleemi lahendamiseks saate kasutada järgmist meetodit.

Teisaldage sisemine ühendamispäring eraldi lausesse ja salvestage tulemid ajutisse tabelisse. Seejärel käivitage kustutuspäring, mida filtreerivad ajutise tabeli kirjed. Lisaks saate suurendada paralleelsuse kululäve, et sundida optimeerijat päringuplaani serialiseerima.

Siin on mõned näited.

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

KUSTUTA DB.dbost. [Tabel] WHERE Alias IN (SELECT * FROM #T)

Viited

Lisateave Microsofti tarkvaravärskenduste terminoloogia kohta.