KB4488809 – JAVÍTÁS: Az állítás akkor fordul elő, amikor egy párhuzamos lekérdezés törlődik egy Filestream-táblából a SQL Server 2014-ben, 2016-ban és 2017-ben

Hatókör
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)

Tünetek

Vegyük például a következő esetet:

  • Nagyon nagy Filestream-táblával rendelkezik.
  • Futtathat egy törlő lekérdezést a Filestream tábla soraira, amely költséges lekérdezési tervet hoz létre, például olyat, amelyet egy belső illesztés szűr a rendszer egy másik nagy táblájába.
  • A lekérdezésoptimalizáló párhuzamos végrehajtási tervet választ.

Ebben az esetben helyességi feltétel lép fel, és az alábbiakhoz hasonló hibaüzenetek jelenhetnek meg az SQL Server hibanaplójában:

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

DateTime spid SpidNumber SQL Server belső hiba. A FILESTREAM-kezelő nem tudja folytatni az aktuális paranccsal.
      

Állapot

A Microsoft megerősítette, hogy ez egy olyan probléma a Microsoft-termékekben, amely az „Érintett szolgáltatás“ című szakaszban van felsorolva.

Megoldás

A hibát az SQL Server következő összegző frissítéseiben javítottuk:

Az SQL Server összegző frissítéseinek ismertetése:

Az SQL Server minden új összegző frissítése tartalmazza az összes gyorsjavítást és minden biztonsági javítást, amely az előző kumulatív frissítésben szerepelt. Tekintse meg az SQL Server legújabb összegző frissítéseit:

Kerülő megoldás

A problémát a következő módszerrel kerülheti meg:

Helyezze át a belső illesztő lekérdezést egy külön utasításba, és az eredményeket mentse egy ideiglenes táblába. Ezután futtassa az ideiglenes tábla bejegyzései alapján szűrt törlő lekérdezést. Emellett megnövelheti a párhuzamosság költségküszöbét, hogy az optimalizáló szerializálja a lekérdezéstervet.

Például:

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

TÖRLÉS A DB.dbo fájlból. [Táblázat] WHERE Alias In (select * FROM #T)

Hivatkozások

Ismerje meg a Microsoft szoftverfrissítésekkel kapcsolatos terminológiáját.