Freigeben über


MSSQLSERVER_2814

Gilt für: SQL Server

Details

attribute Wert
Produktname SQL Server
Ereignis-ID 2814
Ereignisquelle MSSQLSERVER
Komponente SQLEngine
Symbolischer Name PR_POSSIBLE_INFINITE_RECOMPILE
Meldungstext 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.

Erklärung

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.

Ursachencode Beschreibung
1 Schema geändert
2 Statistiken geändert
3 Verzögerte Kompilierung
4 Festgelegte Option geändert
5 Temp. Tabelle geändert
6 Remote-Rowset geändert
7 For Browse-Berechtigungen geändert
8 Abfragebenachrichtigungsumgebung geändert
9 Partitionierte Sicht geändert
10 Cursoroptionen geändert
11 Option (Neukompilierung) angefordert

Benutzeraktion

  1. Zeigen Sie die Anweisung an, die die Neukompilierung verursacht, indem Sie die folgende Abfrage ausführen. Ersetzen Sie die Platzhalter sql_handle, starting_offset, ending_offset und plan_handle durch die in der Fehlermeldung angegebenen Werte. Die Spalten database_name und object_name sind NULL für Ad-hoc- 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 0x06000100A27E7C1FA821B10600with actual plan_handle value*/;
    
  2. Ä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 mehrere SET-Anweisungen enthalten. Diese Anweisungen sollten aus der Prozedur entfernt werden. Weitere Beispiele für die Ursachen von Neukompilierungen und Lösungen finden Sie unter Batch Compilation, Recompilation, and Plan Caching Issues in SQL Server 2005 (Probleme bei der Batchkompilierung, Neukompilierung und beim Zwischenspeichern von Ausführungsplänen in SQL Server 2005).

  3. Wenn das Problem wiederholt auftritt, wenden Sie sich an den Microsoft-Kundendienst.

Weitere Informationen

SQL:StmtRecompile (Ereignisklasse)