Compartir a través de


MSSQLSERVER_2814

Applies to:SQL Server

Details

Attribute Value
Product Name SQL Server
Event ID 2814
Event Source MSSQLSERVER
Component SQLEngine
Symbolic Name PR_POSSIBLE_INFINITE_RECOMPILE
Message Text Se detectó una posible recompilación infinita de SQLHANDLE %hs, PlanHandle %hs, desplazamiento de inicio %d, desplazamiento de fin %d. El motivo de la última recompilación fue % d.

Explanation

Una o más instrucciones hicieron que el lote de consultas se recompilara por lo menos 50 veces. La instrucción especificada se debe corregir para evitar más recompilaciones.

En la siguiente tabla se muestran los motivos de la recompilación.

Reason code Description
1 Schema changed
2 Statistics changed
3 Deferred compile
4 Establecer cambio de opción
5 Cambio en tabla Temp
6 Conjunto de filas remoto modificado
7 Para ver los permisos modificados
8 Entorno de notificación de consultas modificado
9 PartitionView changed
10 Opciones de cursor modificadas
11 Opción (recompilar) solicitada.
12 Plan con parámetros vaciado
13 Linealización del plan de prueba
14 Plan que afecta a la versión de la base de datos modificada
15 Plan del Almacén de consultas que obliga a cambiar la directiva
16 Error al forzar el plan del Almacén de consultas
17 Almacén de consultas que falta el plan
18 Recompilación necesaria para la ejecución intercalada
19 No una recompilación
20 Sugerencias del Almacén de consultas modificadas
21 Error en la aplicación de sugerencias del Almacén de consultas
22 Recompilación del Almacén de consultas para capturar la consulta de cursor
23 Volver a compilar para limpiar el plan de distribuidor multiplan

Para ver todos los códigos de compilación, ejecute la siguiente consulta de vista de administración dinámica:

SELECT * FROM sys.dm_xe_map_values
WHERE name LIKE '%compile%cause%';

User action

  1. Vea la instrucción que produce la recompilación ejecutando la consulta siguiente. Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. Las database_name columnas y object_name son NULL para instrucciones ad hoc y preparadas Transact-SQL.

    SELECT DB_NAME(st.dbid) AS database_name,
           OBJECT_NAME(st.objectid) AS object_name,
           st.text
    FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_sql_text(0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000
     /* replace the 0x01000600B... value with the actual sql_handle */
    ) AS st
    WHERE qs.statement_start_offset = 123 /* replace 123 with actual starting_offset value */
          AND qs.statement_end_offset = 456 /* replace 456 with actual ending_offset value */
          AND qs.plan_handle = 0x06000100A27E7C1FA821B10600; /* replace 0x06000100A27E7C1FA821B10600 with actual plan_handle value */
    
  2. Según sea la descripción del código del motivo, modifique la instrucción, lote o procedimiento para evitar las recompilaciones. Por ejemplo, un procedimiento almacenado puede contener una o varias SET instrucciones. Estas instrucciones se deben quitar del procedimiento.

    Para obtener más ejemplos de causas y resoluciones de recompilación, vea Problemas de compilación por lotes, recompilación y almacenamiento en caché de planes en SQL Server 2005. Para obtener más información sobre las recompilaciones, vea Recompilar planes de ejecución.

  3. Si el problema persiste, póngase en contacto con los Servicios de soporte al cliente (CSS) de Microsoft.