KB4488809 - FIX: la aserción se produce cuando una consulta paralela elimina de una tabla filestream en SQL Server 2014, 2016 y 2017

Se aplica 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)

Síntomas

Tenga en cuenta el siguiente escenario:

  • Tiene una tabla Filestream muy grande.
  • Ejecute una consulta de eliminación de filas en la tabla Filestream que crea un plan de consulta caro, como uno filtrado por una combinación interna a otra tabla grande del sistema.
  • El optimizador de consultas elige un plan de ejecución paralelo.

En este escenario, se producirá una aserción y puede recibir mensajes de error similares a los siguientes en el registro de errores SQL Server:

DateTimespid SpidNumber Error: 5553, Gravedad: 20, Estado: 6.

DateTimespidNumber SQL Server error interno. FileStream Manager no puede continuar con el comando actual.
      

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".

Resolución

Este problema se ha corregido en las siguientes actualizaciones acumulativas para SQL Server:

Acerca de las actualizaciones acumulativas para SQL Server:

Cada nueva actualización acumulativa de SQL Server contiene todas las revisiones y todas las correcciones de seguridad que se incluyeron con la actualización acumulativa anterior. Echa un vistazo a las últimas actualizaciones acumulativas de SQL Server:

Solución alternativa

Para solucionar este problema, puede usar el siguiente método:

Mueva la consulta de combinación interna a una instrucción independiente y guarde los resultados en una tabla temporal. Después, ejecute la consulta de eliminación filtrada por las entradas de la tabla temporal. Además, puede aumentar el umbral de costo para el paralelismo para obligar al optimizador a serializar el plan de consulta.

Por ejemplo:

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

ELIMINAR DE DB.dbo. [Tabla] WHERE Alias IN (SELECT * FROM #T)

Referencias

Obtenga información sobre la terminología que usa Microsoft para describir las actualizaciones de software.