MSSQLSERVER_2814
Aplica-se: SQL Server
Detalhes
Atributo | Valor |
---|---|
Nome do produto | SQL Server |
ID do evento | 2814 |
Origem do Evento | MSSQLSERVER |
Componente | SQLEngine |
Nome simbólico | PR_POSSIBLE_INFINITE_RECOMPILE |
Texto da mensagem | Uma possível recompilação infinita foi detectada para SQLHANDLE %hs, PlanHandle %hs, deslocamento inicial %d, deslocamento final %d. O último motivo da recompilação foi %d. |
Explicação
Uma ou mais instruções fizeram com que o lote de consultas fosse recompilado pelo menos 50 vezes. A instrução especificada deve ser corrigida para evitar mais recompilações.
A tabela a seguir lista os motivos da recompilação.
Código de motivo | Descrição |
---|---|
1 | Esquema alterado |
2 | Estatísticas alteradas |
3 | Compilação adiada |
4 | Opção set alterada |
5 | Tabela temp alterada |
6 | Conjunto de linhas remoto alterado |
7 | Permissões For Browse alteradas |
8 | Ambiente de notificação de consulta alterado |
9 | Exibição de partição alterada |
10 | Opções de cursor alteradas |
11 | Opção (recompilar) solicitada |
Ação do usuário
Para exibir a instrução que causa a recompilação, execute a consulta a seguir. Substitua os espaços reservados sql_handle, starting_offset, ending_offset e plan_handle pelos valores especificados na mensagem de erro. As colunas database_name e object_name são NULL para instruções Transact-SQL ad hoc e preparadas.
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*/;
Com base na descrição do código do motivo, modifique a instrução, o lote ou o procedimento para evitar recompilações. Por exemplo, um procedimento armazenado pode conter uma ou mais instruções SET. Essas instruções devem ser removidas do procedimento. Para obter mais exemplos dos motivos e das resoluções da recompilação, consulte Problemas de compilação em lote, recompilação e cache de planos no SQL Server 2005.
Se o problema persistir, contate os Serviços de Atendimento ao Cliente da Microsoft.