Sdílet prostřednictvím


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 U SQLHANDLE %hsbyl zjištěn možný nekonečný recompilace, PlanHandle %hs, počáteční posun %d, koncový posun %d. Poslední důvod rekompilu byl %d.

Explanation

Jeden nebo více příkazů způsobila, že se dávka dotazu alespoň 50krát znovu zkompilovala. Zadaný příkaz by měl být opraven, aby se zabránilo dalšímu rekompilace.

Následující tabulka uvádí důvody pro rekompilace.

Reason code Description
1 Schema changed
2 Statistics changed
3 Deferred compile
4 Nastavení změny možností
5 Dočasná tabulka se změnila.
6 Změna vzdálené sady řádků
7 Změna oprávnění pro procházení
8 Změna prostředí oznámení dotazu
9 PartitionView changed
10 Změněné možnosti kurzoru
11 Požadována možnost (rekompilovat)
12 Vyprázdněný parametrizovaný plán
13 Lineární plánování testů
14 Plán ovlivňující změněnou verzi databáze
15 Změna zásad vynucení plánu úložiště dotazů
16 Selhání plánu úložiště dotazů
17 V úložišti dotazů chybí plán.
18 Prokládání požadovaného rekompilace provádění
19 Nejedná se o rekompil
20 Změněné rady úložiště dotazů
21 Aplikace nápovědy úložiště dotazů selhala.
22 Rekompilování úložiště dotazů za účelem zachycení dotazu kurzoru
23 Překompilování pro vyčištění plánu dispečera vícerovek

Pokud chcete zobrazit všechny kódy kompilace, spusťte následující dotaz zobrazení dynamické správy:

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

User action

  1. Zobrazte příkaz způsobující rekompilace spuštěním následujícího dotazu. Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. object_name Sloupce database_name jsou NULL určené pro ad hoc a připravené příkazy Transact-SQL.

    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. Na základě popisu kódu důvodu upravte příkaz, dávku nebo proceduru, abyste se vyhnuli rekompilace. Uložená procedura může například obsahovat jeden nebo více SET příkazů. Tyto příkazy by měly být z postupu odebrány.

    Další příklady příčin a řešení rekompilace najdete v tématu Dávkové kompilace, rekompilace a plánování problémů s ukládáním do mezipaměti v SQL Serveru 2005. Další informace o rekompilace naleznete v tématu Rekompil execution plans.

  3. Pokud potíže potrvají, obraťte se na služby zákaznické podpory Microsoftu.