KB4488809 – RETTELSE: Deklaration opstår, når en parallel forespørgsel sletter fra en Filestream-tabel i SQL Server 2014, 2016 og 2017

Gælder for
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)

Symptomer

Overvej følgende scenarie:

  • Du har en meget stor Filestream-tabel.
  • Du kører en sletteforespørgsel af rækker i Filestream-tabellen, der opretter en dyr forespørgselsplan, f.eks. en, der filtreres af en indre joinforbindelse til en anden stor tabel i systemet.
  • Forespørgselsoptimering vælger en parallel eksekveringsplan.

I dette scenarie forekommer der en assertion, og du modtager muligvis fejlmeddelelser, der ligner følgende i SQL Server-fejlloggen:

DateTime spid SpidNumber Fejl: 5553, Alvorsgrad: 20, Tilstand: 6.

Intern fejl i DateTimespid SQL Server. FILESTREAM Manager kan ikke fortsætte med den aktuelle kommando.
      

Status

Microsoft har bekræftet, at dette er et problem i de Microsoft-produkter, der er angivet i afsnittet "Gælder for".

Løsning

Problemet er rettet i følgende kumulative opdateringer til SQL Server:

Om kumulative opdateringer til SQL Server:

Hver ny kumulativ opdatering til SQL Server indeholder alle de hotfixes og alle de sikkerhedsrettelser, der fulgte med den forrige kumulative opdatering. Se de seneste kumulative opdateringer til SQL Server:

Løsning

Du kan løse dette problem på følgende måde:

Flyt den indre join-forespørgsel til en separat sætning, og gem resultaterne i en midlertidig tabel. Kør derefter sletteforespørgslen, som filtreres efter posterne i den midlertidige tabel. Du kan desuden øge omkostningstærsklen for parallelitet for at tvinge optimeringsfunktionen til at serialisere forespørgselsplanen.

Det kunne f.eks. være:

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. [Tabel] WHERE Alias IN (VÆLG * FRA #T)

Referencer

Få mere at vide om den terminologi, som Microsoft bruger til at beskrive softwareopdateringer.