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
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*/;
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.
Si el problema persiste, póngase en contacto con los Servicios de soporte al cliente (CSS) de Microsoft.