KB4488809 - CORREÇÃO: A asserção ocorre quando uma consulta paralela é excluída de uma tabela Filestream no SQL Server 2014, 2016 e 2017

Aplica-se a
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)

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.