KB4488809 - PATAISYMAS: patvirtinimas įvyksta, kai lygiagrečioji užklausa panaikina iš "Filestream" lentelės 2014, 2016 ir 2017 „SQL Server“

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

Požymiai

Apsvarstykite šį scenarijų:

  • Turite labai didelę "Filestream" lentelę.
  • Vykdote eilučių naikinimo užklausą lentelėje "Filestream" ir taip sukuriamas brangus užklausų planas, pvz., filtruojamas pagal vidinę jungtį su kita didele sistemos lentele.
  • Užklausų optimizavimo priemonė pasirenka lygiagrečią vykdymo planą.

Tokiu atveju bus pateiktas patvirtinimas ir galite gauti klaidų pranešimus, panašius į šiuos "„SQL Server“" klaidų žurnale:

DateTime spid SpidNumber Klaida: 5553, Sunkumas: 20, Būsena: 6.

DateTime spid SpidNumber „SQL Server“ vidinė klaida. FILESTREAM tvarkytuvas negali tęsti dabartinės komandos.
      

Būsena

„„Microsoft““ patvirtino, kad tai yra „„Microsoft““ produktų, išvardytų dalyje „Taikoma“, problema.

Sprendimas

Problema išspręsta šiuose kaupiamuosiuose „SQL Server“ naujinimuose:

Apie "„SQL Server“" kaupiamuosius naujinimus:

Kiekviename naujame „SQL Server“ kaupiamajame naujinime yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo įtrauktos į ankstesnį kaupiamąjį naujinimą. Peržiūrėkite naujausius "„SQL Server“" kaupiamuosius naujinimus:

Sprendimo būdas

Norėdami išspręsti šią problemą, galite naudoti šį metodą:

Perkelkite inner join užklausą į atskirą sakinį ir įrašykite rezultatus į laikinąją lentelę. Tada vykdykite naikinimo užklausą, kuri filtruojama pagal įrašus laikinojoje lentelėje. Be to, galite padidinti lygiagretumo išlaidų ribą, kad optimizuotojas būtų priverstas išdėstyti užklausos planą nuosekliai.

Pavyzdžiui:

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

PANAIKINTI IŠ DB.dbo. [Lentelė] KUR PSEUDONIMAS (pasirinkite * IŠ #T)

Nuorodos

Sužinokite daugiau apie terminus, kuriuos „„Microsoft““ naudoja apibūdindama programinės įrangos naujinimus.