分享方式:


MSSQLSERVER_2814

適用於:SQL Server

詳細資料

屬性
產品名稱 SQL Server
事件識別碼 2814
事件來源 MSSQLSERVER
元件 SQLEngine
符號名稱 PR_POSSIBLE_INFINITE_RECOMPILE
訊息文字 偵測到 SQLHANDLE %hs、PlanHandle %hs、起始位移 %d、結尾位移 %d 可能發生無限重新編譯。 上次重新編譯的原因是 %d。

說明

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

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

原因碼 描述
1 結構描述已變更
2 統計資料已變更
3 延遲編譯
4 已變更設定選項
5 暫存數據表已變更
6 遠端資料列集已變更
7 針對 [瀏覽許可權] 已變更
8 查詢通知環境已變更
9 數據分割檢視已變更
10 資料指標選項已變更
11 要求的選項 (重新編譯)

使用者動作

  1. 執行下列查詢來檢視導致重新編譯的語句。 將 sql_handlestarting_offsetending_offsetplan_handle 佔位元取代為錯誤訊息中指定的值。 database_name和object_name數據行是臨機操作和備妥 Transact-SQL 語句的 NULL。

    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. 根據原因代碼描述,修改語句、批次或程式,以避免重新編譯。 例如,預存程式可能包含一或多個 SET 語句。 這些語句應該從程式中移除。 如需重新編譯原因和解析的其他範例,請參閱 SQL Server 2005 中的批次編譯、重新編譯和規劃快取問題。

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

另請參閱

SQL:StmtRecompile 事件類別