KB4488809 — LABOJUMS: Apgalvojums rodas, ja paralēls vaicājums izdzēš no Filestream tabulas programmā SQL Server 2014, 2016 un 2017

Attiecas uz
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)

Pazīmes

Apsveriet šādu scenāriju:

  • Jums ir ļoti liela Filestream tabula.
  • Jūs izpildāt rindu dzēšanas vaicājumu tabulā Filestream, kas izveido dārgu vaicājumu plānu, piemēram, tādu, kas tiek filtrēts pēc iekšējā savienojuma ar citu lielu tabulu sistēmā.
  • Vaicājumu optimizētājs izvēlas paralēlās izpildes plānu.

Šādā gadījumā tiks parādīts apgalvojums, un iespējams, saņemsit kļūdu ziņojumus, kas līdzināsies tālāk norādītajiem kļūdu ziņojumiem SQL Server kļūdu žurnālā:

DateTime spid SpidNumber kļūda: 5553, smagums: 20, stāvoklis: 6.

DateTime spid SpidNumber SQL Server iekšējā kļūda. FILESTREAM pārvaldnieks nevar turpināt ar pašreizējo komandu.
      

Statuss

Microsoft apstiprināja, ka šī ir problēma Microsoft produktos, kas norādīti sadaļā "attiecas uz".

Risinājums

Problēma ir novērsta tālāk norādītajos SQL Server kumulatīvajos atjauninājumos.

Par SQL Server kumulatīvajiem atjauninājumiem:

Katrā jaunajā SQL Server kumulatīvajā atjauninājumā ir visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos SQL Server kumulatīvos atjauninājumus:

Risinājums

Lai apietu šo problēmu, varat izmantot šādas metodes:

Pārvietojiet inner join vaicājumu uz atsevišķu priekšrakstu un saglabājiet rezultātus pagaidu tabulā. Pēc tam izpildiet dzēšanas vaicājumu, kas tiek filtrēts pēc ierakstiem pagaidu tabulā. Turklāt varat palielināt paralēlisma izmaksu slieksni, lai liktu optimizētājam serializēt vaicājuma plānu.

Piemērs.

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

DZĒST NO DB.dbo. [Tabula] KUR AIZSTĀJVĀRDS (atlasiet * NO #T)

Atsauces

Uzziniet par terminoloģiju, ko Microsoft izmanto, lai aprakstītu programmatūras atjauninājumus.