Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
Applies to:SQL Server
Details
| Attribute | Value |
|---|---|
| Product Name | SQL Server |
| Event ID | 2814 |
| Event Source | MSSQLSERVER |
| Component | SQLEngine |
| Symbolic Name | PR_POSSIBLE_INFINITE_RECOMPILE |
| Message Text | 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. |
Explanation
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.
| Reason code | Description |
|---|---|
| 1 | Schema changed |
| 2 | Statistics changed |
| 3 | Deferred compile |
| 4 | Définir la modification de l’option |
| 5 | Table temporaire modifiée |
| 6 | Ensemble de lignes à distance modifié |
| 7 | Pour les autorisations de navigation modifiées |
| 8 | Environnement de notification de requête modifié |
| 9 | PartitionView changed |
| 10 | Options de curseur modifiées |
| 11 | Option (recompilation) demandée. |
| 12 | Plan paramétré vidé |
| 13 | Linéarisation du plan de test |
| 14 | Plan affectant la version de la base de données modifiée |
| 15 | Stratégie de forçage du plan du Magasin des requêtes modifiée |
| 16 | Échec du forçage du plan du Magasin des requêtes |
| 17 | Magasin des requêtes manquant dans le plan |
| 18 | Recompilation requise pour l’exécution entrelacée |
| 19 | Pas de recompilation |
| 20 | Indicateurs du Magasin des requêtes modifiés |
| 21 | Échec de l’application indicateurs du Magasin des requêtes |
| 22 | Recompilation du magasin de requêtes pour capturer la requête de curseur |
| 23 | Recompilation pour nettoyer le plan de répartiteur multiplan |
Pour afficher tous les codes de compilation, exécutez la requête de vue de gestion dynamique suivante :
SELECT * FROM sys.dm_xe_map_values
WHERE name LIKE '%compile%cause%';
User action
Affichez l'instruction qui engendre la recompilation en exécutant la requête suivante. Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. Les
database_namecolonnes etobject_nameles colonnes sont destinéesNULLaux 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 0x06000100A27E7C1FA821B10600 with 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
SETinstructions. Ces instructions doivent être supprimées de la procédure.Pour plus d’exemples de causes et de résolutions de recompilation, consultez Compilation par lots, Recompilation et Problèmes de mise en cache de plan dans SQL Server 2005. Pour plus d’informations sur les recompilations, consultez Recompiler les plans d’exécution.
Si le problème persiste, contactez les services d'assistance Microsoft.