Applies ToSQL 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:

  • Tem uma mesa de filestream muito grande.

  • Você executou uma consulta de eliminação de linhas na tabela Filestream que cria um plano de consulta caro, como um que é filtrado por uma junção interna para outra grande tabela no sistema.

  • O otimizador de consultas escolhe um plano de execução paralelo.

Neste cenário,ocorrerá uma ssertion e poderá receber mensagens de erro que se assemelham ao seguinte no registo de erro do SQL Server:

DataTime espiou SpidNumber Error: 5553, Severidade: 20, Estado: 6.

DataTime espiou spidNumber SQL Server erro interno. O gestor FILESTREAM não pode continuar com o comando atual.

Estado

A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".

Resolução

O problema é corrigido nas seguintes atualizações cumulativas para o SQL Server:

Sobre as atualizações cumulativas para o SQL Server:

Cada nova atualização cumulativa para o SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior atualização cumulativa. Confira as últimas atualizações cumulativas do SQL Server:

Solução

To trabalho em torno desta questão, you pode usar o seguinte método:

Mova a consulta de união interna para uma declaração separada e guarde os resultados para uma tabela temporária. Em seguida, executar a consulta de eliminação que é filtrada pelas entradas na tabela temporária. Além disso, pode aumentar o limiar de custos para o paralelismo para forçar o otimizador a serializar o plano de consulta.

Por exemplo:

SELECIONE 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. [Mesa] ONDE Alias IN (SELECT * FROM #T)

Referências

Saiba mais sobre a terminologia que A Microsoft usa para descrever atualizações de software.

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.

As comunidades ajudam-no a colocar e a responder perguntas, a dar feedback e a ouvir especialistas com conhecimentos abrangentes.