Symptome
Nehmen Sie folgendes Szenario an:
- Sie verfügen über eine sehr große Filestream-Tabelle.
- Sie führen eine Löschabfrage von Zeilen in der Filestream-Tabelle aus, die einen teuren Abfrageplan erstellt, z. B. einen, der nach einer inneren Verknüpfung mit einer anderen großen Tabelle im System gefiltert wird.
- Der Abfrageoptimierer wählt einen parallelen Ausführungsplan aus.
In diesem Szenario tritt eine Assertion auf, und Sie erhalten möglicherweise Fehlermeldungen, die im SQL Server Fehlerprotokoll wie die folgende aussehen:
DateTime spid SpidNumber Fehler: 5553, Schweregrad: 20, Status: 6.
DateTime spid SpidNumber SQL Server internen Fehler. FILESTREAM-Manager kann mit dem aktuellen Befehl nicht fortgesetzt werden.
Status
Microsoft hat bestätigt, dass dies ein Problem bei den Microsoft-Produkten ist, die im Abschnitt „Gilt für“ aufgeführt sind.
Lösung
Das Problem wurde in den folgenden kumulativen Updates für SQL Server behoben:
Informationen zu kumulativen Updates für SQL Server:
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:
Problemumgehung
Um dieses Problem zu umgehen, können Sie die folgende Methode verwenden:
Verschieben Sie die innere Joinabfrage in eine separate Anweisung, und speichern Sie die Ergebnisse in einer temporären Tabelle. Führen Sie dann die Löschabfrage aus, die nach den Einträgen in der temporären Tabelle gefiltert wird. Darüber hinaus können Sie den Kostenschwellenwert für Parallelität erhöhen, um die Serialisierung des Abfrageplans durch den Optimierer zu erzwingen.
Beispiel:
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. [Tabelle] WHERE Alias IN (SELECT * FROM #T)
Referenzmaterial
Informieren Sie sich über die Terminologie, die Microsoft zum Beschreiben von Softwareupdates verwendet.