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
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*/;
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.
Si le problème persiste, contactez les services d'assistance Microsoft.