Sintomi
Considerare lo scenario descritto di seguito:
-
Si dispone di una tabella FILESTREAM molto grande.
-
Si esegue una query di eliminazione di righe nella tabella FILESTREAM che crea un piano di query costoso, ad esempio quello filtrato da un inner join a un'altra tabella di grandi dimensioni nel sistema.
-
Query Optimizer sceglie un piano di esecuzione parallela.
In questo scenariosi verificherà un ssertion e potrebbe essere visualizzato un messaggio di errore analogo al seguente nel log degli errori di SQL Server:
Errore DateTime SPID SpidNumber : 5553, gravità: 20, stato: 6.
DateTime SPID SpidNumber errore interno di SQL Server. FILESTREAM Manager non può continuare con il comando corrente.
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".
Risoluzione
Il problema è risolto nei seguenti aggiornamenti cumulativi per SQL Server:
Informazioni sugli aggiornamenti cumulativi per SQL Server:
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutte le aggiornamenti rapidi e tutte le correzioni di sicurezza incluse nel precedente aggiornamento cumulativo. Vedere gli ultimi aggiornamenti cumulativi per SQL Server:
Soluzione alternativa
Aggirare il problema,puoi usare il metodo seguente:
È necessario trasferire la query inner join in un'istruzione separata e salvare i risultati in una tabella temporanea. Eseguire quindi la query di eliminazione filtrata in base alle voci della tabella temporanea. Inoltre, puoi aumentare la soglia di costo per il parallelismo per forzare la serializzazione del piano di query per l'ottimizzatore.
Ad esempio:
Selezionare RefTable. alias in #T da DB. dbo. OuterTable INNER JOIN DB. dbo. RefTable in RefTable. alias = OuterTable. alias
DOVE OuterTable. alias > 30006 e OuterTable. alias < 30010
ELIMINARE da DB. dbo. Tabella DOVE alias IN (Seleziona * da #T)
Riferimenti
Informazioni sulla terminologia che Microsoft usa per descrivere gli aggiornamenti software.