Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este artículo le ayuda a solucionar un problema que se produce porque un procedimiento almacenado en una base de datos que usa la característica Almacén de datos de consultas falla periódicamente.
Versión original del producto: SQL Server 2016
Número de KB original: 4465511
Síntomas
Considere el caso siguiente:
Tiene una base de datos de Microsoft SQL Server 2016 que usa la característica Query Store.
Tiene un procedimiento almacenado que realiza una llamada a otro procedimiento almacenado mediante la
INSERT...EXECsintaxis .La función Query Data Store ejecuta periódicamente la limpieza automática al acercarse a su tamaño máximo configurado. Además, el estado del Almacén de datos de consulta cambia de
READ_WRITEaREAD_ONLY.
En este escenario, se produce un error periódicamente en la ejecución del procedimiento almacenado primario y recibe un mensaje de error similar al siguiente:
Msg 556, Level 16, State 2, Line LineNumber
INSERT EXEC ha fallado debido a que el procedimiento almacenado ha alterado el esquema de la tabla de destino.
Causa
El proceso de limpieza automática elimina el plan del almacén de datos de consultas. La consulta experimenta una recompilación porque falta el plan de Query Data Store. Sin embargo, el plan todavía está presente en la memoria caché de procedimientos. Por diseño, cuando se produce la operación de recompilación, SQL Server produce el error 556 para evitar la ejecución duplicada del procedimiento secundario. Esta operación duplicada provocaría que se devuelvan resultados incorrectos.
Solución
Información de Service Pack para SQL Server 2016
Este problema se ha corregido en el siguiente Service Pack para SQL Server:
Service Pack 3 para SQL Server 2016
Acerca de Service Packs para SQL Server:
Los Service Packs son acumulativos. Cada nuevo Service Pack contiene todas las correcciones que se encuentran en los service packs anteriores, junto con las nuevas correcciones. Se recomienda aplicar el Service Pack más reciente y la actualización acumulativa más reciente para ese Service Pack. No tiene que instalar un Service Pack anterior antes de instalar el Service Pack más reciente. Consulte la tabla 1 del siguiente artículo para obtener más información sobre el Service Pack más reciente y la actualización acumulativa más reciente:
Cómo determinar el nivel de versión, edición y actualización de SQL Server y sus componentes
Solución alternativa
Para resolver el problema, siga estos pasos:
Aumente el tamaño de Query Data Store. Esto reducirá la frecuencia o probabilidad de que Query Data Store borre el plan y entre en el
READ_ONLYmodo operativo.Agregue el control de errores al código para detectar el error 556 y, a continuación, vuelva a enviar la
INSERT EXECconsulta.Borre la caché de procedimientos cuando el almacén de datos de consulta vuelva al estado
READ_WRITEdesdeREAD_ONLY.
Información adicional
Debido a los cambios realizados en Query Data Store en Microsoft SQL Server 2017, este problema no se produce en SQL Server 2017.