共用方式為


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 偵測到 SQLHANDLE %hs、PlanHandle %hs、起始位移 %d、結尾位移 %d 可能發生無限重新編譯。 上次重新編譯的原因是 %d。

Explanation

一或多個語句導致查詢批次至少重新編譯 50 次。 應更正指定的語句,以避免進一步重新編譯。

下表列出重新編譯的原因。

Reason code Description
1 Schema changed
2 Statistics changed
3 Deferred compile
4 設定選項變更
5 暫存數據表已變更
6 遠端資料列集已變更
7 針對已變更的瀏覽許可權
8 查詢通知環境已變更
9 PartitionView changed
10 資料指標選項已變更
11 要求的選項 (重新編譯)
12 參數化方案已清除
13 測試計劃線性化
14 影響資料庫版本的計畫已變更
15 查詢存放區計畫強制策略已更改
16 強制執行查詢存放區計畫失敗
17 查詢存放區缺失執行計畫
18 交錯執行需要重新編譯
19 不是重新編譯
20 查詢存放區提示已變更
21 查詢存放區提示應用程式失敗
22 查詢存放區重新編譯以擷取數據指標查詢
23 重新編譯以清除多計劃發送器計劃

若要檢視所有編譯程式代碼,請執行下列動態管理檢視查詢:

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

User action

  1. 執行下列查詢來檢視導致重新編譯的語句。 Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. 和 object_name 數據database_name行適用於NULL臨機作和準備 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. 根據原因代碼描述,修改語句、批次或程式,以避免重新編譯。 例如,預存程式可能包含一或多個 SET 語句。 這些語句應該從程式中移除。

    如需重新編譯原因和解析的更多範例,請參閱 SQL Server 2005 中的批次編譯、重新編譯和規劃快取問題。 如需重新編譯的詳細資訊,請參閱 重新編譯執行計劃

  3. 如果持續發生問題,請連絡 Microsoft 客戶支援服務。