Simptome
Luați în considerare următorul scenariu:
- Aveți un tabel Filestream foarte mare.
- Executați o interogare de ștergere a rândurilor din tabelul Filestream care creează un plan de interogare costisitor, cum ar fi unul care este filtrat de o asociere internă la un alt tabel mare din sistem.
- Instrumentul de optimizare a interogărilor alege un plan de executare în paralel.
În acest scenariu, va apărea o aserțiune și este posibil să primiți mesaje de eroare care seamănă cu următoarele, în jurnalul de erori SQL Server:
DateTime spid SpidNumber Eroare: 5553, Severitate: 20, Stare: 6.
DateTime spid SpidNumber Eroare internă SQL Server. Managerul FILESTREAM nu poate continua cu comanda curentă.
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft care sunt listate în secțiunea „Se aplică la”.
Rezolvare
Problema este remediată în următoarele actualizări cumulative pentru SQL Server:
Despre actualizările cumulative pentru SQL Server:
Fiecare actualizare cumulativă nouă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu actualizarea cumulativă anterioară. Consultați cele mai recente actualizări cumulative pentru SQL Server:
Cea mai recentă actualizare cumulativă pentru SQL Server 2017
Cea mai recentă actualizare cumulativă pentru SQL Server 2016
Cea mai recentă actualizare cumulativă pentru SQL Server 2014
Soluție
Pentru a evita această problemă, puteți utiliza următoarea metodă:
Mutați interogarea de asociere internă într-o instrucțiune separată și salvați rezultatele într-un tabel temporar. Apoi rulați interogarea de ștergere filtrată după intrările din tabelul temporar. În plus, puteți mări pragul de cost pentru paralelism pentru a forța optimizatorul să serializeze planul de interogare.
De exemplu:
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
ȘTERGERE DIN DB.dbo. [Tabel] WHERE Alias in (selectați * din #T)
Referințe
Aflați despre terminologia pe care o utilizează Microsoft pentru a descrie actualizările de software.