Partager via


MSSQLSERVER_2814

S’applique à : SQL Server

Détails

Attribut Valeur
Nom du produit SQL Server
ID de l’événement 2814
Source de l’événement MSSQLSERVER
Composant SQLEngine
Nom symbolique PR_POSSIBLE_INFINITE_RECOMPILE
Texte du message Recompilation infinie détectée pour SQLHANDLE %hs, PlanHandle %hs, décalage de début %d, décalage de fin %d. Dernière raison de la recompilation : %d.

Explication

Une ou plusieurs instructions ont provoqué la recompilation du lot de requêtes au moins 50 fois. L'instruction spécifiée doit être corrigée pour éviter d'autres recompilations.

Le tableau suivant répertorie les raisons de la recompilation.

Code motif Description
1 Schéma modifié
2 Statistiques modifiées
3 Compilation différée
4 Option Set modifiée
5 Table temporaire modifiée
6 Ensemble de lignes à distance modifié
7 Autorisations de recherche modifiées
8 Environnement de notification de requête modifié
9 Affichage partition modifié
10 Options de curseur modifiées
11 Option (recompilation) demandée.

Action de l’utilisateur

  1. Affichez l'instruction qui engendre la recompilation en exécutant la requête suivante. Remplacez les espaces réservés sql_handle, starting_offset, ending_offset, et plan_handle par les valeurs spécifiées dans le message d’erreur. Les colonnes database_name et object_name sont NULL pour les instructions Transact-SQL ad hoc et préparées.

    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. En fonction de la description du code de la raison, modifiez l'instruction, le lot ou la procédure pour éviter les recompilations. Par exemple, une procédure stockée peut contenir une ou plusieurs instructions SET. Ces instructions doivent être supprimées de la procédure. Pour plus d’exemples de causes de recompilation et de résolutions, consultez Batch Compilation, Recompilation, and Plan Caching Issues in SQL Server 2005.

  3. Si le problème persiste, contactez les services d'assistance Microsoft.

Voir aussi

Classe d'événements SQL:StmtRecompile