Megosztás:


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 Lehetséges végtelen újrafordítást észleltek az SQLHANDLE %hs, PlanHandle %hs, a kezdő eltolás %dés a végső eltolás %desetében. Az utolsó újrafordítás oka %dvolt.

Explanation

Egy vagy több utasítás miatt a lekérdezési köteg legalább 50-szer újrafordításra került. A megadott utasítást ki kell javítani a további újrafordítások elkerülése érdekében.

Az alábbi táblázat az újrafordítás okait sorolja fel.

Reason code Description
1 Schema changed
2 Statistics changed
3 Deferred compile
4 Beállítás módosítása
5 Módosult a temp tábla
6 A távoli sorok halmaza megváltozott
7 A böngészési engedélyek módosítása
8 Módosult a lekérdezésértesítési környezet
9 PartitionView changed
10 A kurzor beállításai megváltoztak
11 Kért lehetőség (újrafordítás)
12 Paraméteres terv kiürítve
13 Terv linearizálásának tesztelése
14 Az adatbázisverziót érintő terv módosult
15 Módosult a lekérdezéstár-terv kényszerítési szabályzata
16 A lekérdezéstár-terv kényszerítése nem sikerült
17 A Lekérdezéstárból hiányzik a csomag
18 Az interleaved execution required recompilation
19 Nem újrafordítás
20 A Lekérdezéstár tippjei megváltoztak
21 A Lekérdezéstár tippalkalmazás nem sikerült
22 Lekérdezéstár újrafordítása a kurzoros lekérdezés rögzítéséhez
23 Újrafordítás a többsíkú diszpécsercsomag megtisztításához

Az összes fordítási kód megtekintéséhez futtassa a következő dinamikus felügyeleti nézet lekérdezését:

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

User action

  1. Tekintse meg az újrafordítást okozó utasítást az alábbi lekérdezés futtatásával. Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. object_name Az database_name oszlopok NULL alkalmi és előkészített Transact-SQL utasítások.

    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. Az okkód leírása alapján módosítsa az utasítást, a köteget vagy az eljárást az újrafordítások elkerülése érdekében. Egy tárolt eljárás például tartalmazhat egy vagy több SET utasítást. Ezeket az utasításokat el kell távolítani az eljárásból.

    Az újrafordítás okaira és megoldására további példákat az SQL Server 2005 Batch-fordítási, újrafordítási és csomag-gyorsítótárazási problémái című témakörben talál. További információ az újrafordításokról: Újrafordítási végrehajtási tervek.

  3. Ha a probléma továbbra is fennáll, forduljon a Microsoft ügyfélszolgálatához.