KB4488809 - OPRAVA: Kontrolní výraz nastane, když se paralelní dotaz odstraní z tabulky Filestream v SQL Server 2014, 2016 a 2017

Platí pro
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)

Příznaky

Vezměte v úvahu následující scénář:

  • Máte velmi velkou tabulku Filestream.
  • Spustíte odstraňovací dotaz řádků v tabulce Filestream, který vytvoří náročný plán dotazu, jako je například dotaz filtrovaný vnitřním spojením s jinou velkou tabulkou v systému.
  • Optimalizátor dotazů zvolí paralelní plán provádění.

V tomto scénáři dojde k výskytu kontrolního výrazu a v protokolu chyb serveru SQL Server se můžou zobrazit chybové zprávy podobné následující:

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

DateTime spid SpidNumber Vnitřní chyba SQL Server. FILESTREAM manager nemůže pokračovat s aktuálním příkazem.
      

Stav

Společnost Microsoft potvrdila, že se jedná o problém produktů Microsoft, které jsou uvedeny v sekci Platí pro.

Řešení

Tento problém je opravený v následujících kumulativních aktualizacích pro SQL Server:

Informace o kumulativních aktualizacích pro SQL Server:

Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace pro SQL Server:

Alternativní řešení

Tento problém můžete vyřešit pomocí následující metody:

Přesuňte dotaz Inner JOIN do samostatného příkazu a výsledky uložte do dočasné tabulky. Potom spusťte odstraňovací dotaz filtrovaný podle položek v dočasné tabulce. Kromě toho můžete zvýšit prahovou hodnotu nákladů na paralelismus, abyste optimalizátor vynutili serializaci plánu dotazu.

Příklady:

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. [Tabulka] WHERE Alias IN (SELECT * FROM #T)

Reference

Podívejte se na informace o terminologii, kterou společnost Microsoft používá k popisování aktualizací softwaru.