Partilhar via


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

  1. 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*/;
    
  2. 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.

  3. Se o problema persistir, contate os Serviços de Atendimento ao Cliente da Microsoft.

Confira também

Classe de evento SQL:StmtRecompile