Dela via


MSSQLSERVER_2814

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 En möjlig oändlig omkompilering identifierades för SQLHANDLE %hs, PlanHandle %hs, startförskjutning %d, slutförskjutning %d. Den senaste omkompileringsorsaken var %d.

Explanation

En eller flera instruktioner gjorde att frågebatchen kompilera om minst 50 gånger. Den angivna instruktionen bör korrigeras för att undvika ytterligare omkompileringar.

I följande tabell visas orsakerna till omkompilering.

Reason code Description
1 Schema changed
2 Statistics changed
3 Deferred compile
4 Ange alternativändring
5 Temporär tabell har ändrats
6 Fjärrraduppsättningen har ändrats
7 För ändrade bläddrarbehörigheter
8 Frågemeddelandemiljön har ändrats
9 PartitionView changed
10 Marköralternativen har ändrats
11 Alternativet (kompilera om) begärdes
12 Parametriserad plan utrensad
13 Linjärisering av testplan
14 Plan som påverkar databasversionen har ändrats
15 Policy för tvingande av Query Store-planer har ändrats
16 Det gick inte att tvinga fram query Store-planen
17 Query Store saknar en plan
18 Interleaved-körning krävs omkompilering
19 Inte en omkompilering
20 Frågearkivtips har ändrats
21 Frågebutikens tipsprogram misslyckades
22 Query Store-omkompilering för att samla in markörfråga
23 Kompilera om för att rensa planen för multiplansutskick

Om du vill visa alla kompileringskoder kör du följande fråga för dynamisk hanteringsvy:

SELECT * FROM sys.dm_xe_map_values
WHERE name LIKE '%compile%cause%';

User action

  1. Visa instruktionen som orsakar omkompileringen genom att köra följande fråga. Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. Kolumnerna database_name och object_name är NULL för ad hoc och förberedda Transact-SQL-instruktioner.

    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 */
    
  2. Baserat på beskrivningen av orsakskoden ändrar du instruktionen, batchen eller proceduren för att undvika omkompileringar. En lagrad procedur kan till exempel innehålla en eller flera SET instruktioner. Dessa instruktioner bör tas bort från proceduren.

    Fler exempel på orsaker och lösningar för omkompilering finns i Batch-kompilering, omkompilering och plancachelagringsproblem i SQL Server 2005. Mer information om omkompileringar finns i Kompilera om körningsplaner.

  3. Kontakta Microsofts kundtjänst om problemet kvarstår.