Compartir a través de


MSSQLSERVER_2814

Se aplica a: SQL Server

Detalles

Attribute Valor
Nombre del producto SQL Server
Id. de evento 2814
Origen de eventos MSSQLSERVER
Componente SQLEngine
Nombre simbólico PR_POSSIBLE_INFINITE_RECOMPILE
Texto del mensaje 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.

Explicación

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.

Código de motivo Descripción
1 Esquema modificado
2 Estadísticas modificadas
3 Compilación diferida
4 Cambio en opción configurada
5 Cambio en tabla Temp
6 Conjunto de filas remoto modificado
7 Permisos For Browse cambiados
8 Entorno de notificación de consultas modificado
9 Vista de partición cambiada
10 Opciones de cursor modificadas
11 Opción (recompilar) solicitada.

Acción del usuario

  1. Vea la instrucción que produce la recompilación ejecutando la consulta siguiente. Reemplace los marcadores de posición sql_handle, starting_offset, ending_offset y plan_handle por los valores especificados en el mensaje de error. Las columnas database_name y object_name son NULL para instrucciones ad hoc y preparadas de 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 0x06000100A27E7C1FA821B10600with 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 más instrucciones SET. Estas instrucciones se deben quitar del procedimiento. Para obtener ejemplos adicionales de causas de la recompilación y sus soluciones, vea Problemas de compilación y recompilación de lotes, y de almacenamiento en caché de planes en SQL Server 2005.

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

Consulte también

SQL:StmtRecompile (clase de eventos)