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
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*/;
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.
Se il problema persiste, contattare il Servizio Supporto Tecnico Clienti Microsoft.