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.