Condividi tramite


MSSQLSERVER_2814

Si applica a: SQL Server

Dettagli

Attributo Valore
Nome prodotto SQL Server
ID evento 2814
Origine evento MSSQLSERVER
Componente SQLEngine
Nome simbolico PR_POSSIBLE_INFINITE_RECOMPILE
Testo del messaggio Rilevata una possibile ricompilazione infinita per SQLHANDLE %hs, PlanHandle %hs, offset iniziale %d, offset finale %d. Motivo dell'ultima ricompilazione: % d.

Spiegazione

Una o più istruzioni ha determinato la ricompilazione del batch di query almeno 50 volte. Per evitare ulteriori ricompilazioni, è necessario correggere l'istruzione specificata.

I motivi della ricompilazione sono elencati nella tabella seguente.

Codice motivo Descrizione
1 Schema modificato
2 Statistiche modificate
3 Compilazione posticipata
4 Opzione impostata modificata
5 Tabella temporanea modificata
6 Set di righe remoto modificato
7 Autorizzazioni FOR BROWSE modificate
8 Ambiente di notifica query modificato
9 Vista partizionata modificata
10 Opzioni cursore modificate
11 Opzione (recompile) richiesta

Azione utente

  1. Visualizzare l'istruzione che determina la ricompilazione mediante l'esecuzione della query seguente. Sostituire i segnaposto sql_handle, starting_offset, ending_offset e plan_handle con i valori specificati nel messaggio di errore. Le colonne database_name e object_name sono NULL per istruzioni Transact-SQL ad hoc e preparate.

    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. In base alla descrizione del codice motivo, modificare l'istruzione, il batch o la procedura per evitare ricompilazioni. Una stored procedure può contenere, ad esempio, uno o più istruzioni SET. Queste istruzioni devono essere rimosse dalla procedura. Per esempi aggiuntivi sulle cause e sulle risoluzioni dei problemi di ricompilazione, vedere Problematiche di compilazione batch, ricompilazione e memorizzazione dei piani nella cache in SQL Server 2005.

  3. Se il problema persiste, contattare il Servizio Supporto Tecnico Clienti Microsoft.

Vedi anche

Classe di evento SQL:StmtRecompile