Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 | Es wurde ein mögliche unbegrenzte Neukompilierung für SQLHANDLE %hs, PlanHandle %hs, Startoffset %d, Endoffset %d erkannt. Die letzte Ursache für die Neukompilierung war %d. |
Explanation
Eine oder mehrere Anweisungen haben bewirkt, dass der Abfragebatch mindestens 50 Mal neu kompiliert wurde. Die angegebene Anweisung sollte korrigiert werden, um weitere Neukompilierungen zu vermeiden.
In der folgenden Tabelle werden die Ursachen für die Neukompilierung aufgelistet.
| Reason code | Description |
|---|---|
| 1 | Schema changed |
| 2 | Statistics changed |
| 3 | Deferred compile |
| 4 | Festlegen der Optionsänderung |
| 5 | Temp. Tabelle geändert |
| 6 | Remote-Rowset geändert |
| 7 | Zum Ändern der Berechtigungen für "Durchsuchen" |
| 8 | Abfragebenachrichtigungsumgebung geändert |
| 9 | PartitionView changed |
| 10 | Cursoroptionen geändert |
| 11 | Option (Neukompilierung) angefordert |
| 12 | Parametrisierter Plan geleert |
| 13 | Linearisierung des Testplans |
| 14 | Plan, der sich auf die geänderte Datenbankversion auswirkt |
| 15 | Abfragespeicherplan zum Erzwingen von Richtlinienänderung |
| 16 | Fehler beim Erzwingen des Abfragespeicherplans |
| 17 | Abfragespeicher, der den Plan fehlt |
| 18 | Interleavierte Ausführung erforderlich neu kompiliert |
| 19 | Kein erneutes Kompilieren |
| 20 | Abfragespeicherhinweise geändert |
| 21 | Fehler bei der Abfragespeicherhinweisanwendung |
| 22 | Erneutes Kompilieren des Abfragespeichers zum Erfassen der Cursorabfrage |
| 23 | Neukompilieren zum Bereinigen des Multiplan-Verteilerplans |
Führen Sie zum Anzeigen aller Kompilierungscodes die folgende Dynamische Verwaltungsansichtsabfrage aus:
SELECT * FROM sys.dm_xe_map_values
WHERE name LIKE '%compile%cause%';
User action
Zeigen Sie die Anweisung an, die die Neukompilierung verursacht, indem Sie die folgende Abfrage ausführen. Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. Die
database_namespalten sindobject_nameNULLfür Ad-hoc-Anweisungen und vorbereitete Transact-SQL Anweisungen.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 */Ändern Sie auf Grundlage der Beschreibung des Ursachencodes die Anweisung, den Batch oder die Prozedur, um Neukompilierungen zu vermeiden. Eine gespeicherte Prozedur kann z. B. eine oder
SETmehrere Anweisungen enthalten. Diese Anweisungen sollten aus der Prozedur entfernt werden.Weitere Beispiele für Neukompilierungsursachen und -auflösungen finden Sie unter Batchkompilierung, Neukompilierung und Planen von Zwischenspeicherungsproblemen in SQL Server 2005. Weitere Informationen zu Neukompilierungen finden Sie unter Recompilile-Ausführungspläne.
Wenn das Problem wiederholt auftritt, wenden Sie sich an den Microsoft-Kundendienst.