Sintomas
Considere o seguinte cenário:
- Você tem uma tabela Filestream muito grande.
- Você executa uma consulta exclusão de linhas na tabela Filestream que cria um plano de consulta caro, como um que é filtrado por uma junção interna para outra tabela grande no sistema.
- O otimizador de consulta escolhe um plano de execução paralela.
Nesse cenário, ocorrerá uma declaração e você poderá receber mensagens de erro semelhantes às seguintes no log de erros do SQL Server:
Erro DateTime spid SpidNumber : 5553, Severidade: 20, Estado: 6.
DateTime spid SpidNumber erro interno do SQL Server. O gerenciador FILESTREAM não pode continuar com o comando atual.
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Resolução
O problema é corrigido nas seguintes atualizações cumulativas para o SQL Server:
Sobre atualizações cumulativas para o SQL Server:
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes para o SQL Server:
Solução alternativa
Para contornar esse problema, você pode usar o seguinte método:
Mova a consulta de junção interna para uma instrução separada e salve os resultados em uma tabela temporária. Em seguida, execute a consulta exclusão filtrada pelas entradas na tabela temporária. Além disso, você pode aumentar o limite de custo para paralelismo para forçar o otimizador a serializar o plano de consulta.
Por exemplo:
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
EXCLUIR DE DB.dbo. [Tabela] WHERE Alias IN (SELECT * FROM #T)
Referências
Saiba mais sobre a terminologia que a Microsoft usa para descrever atualizações de software.