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
執行下列查詢來檢視導致重新編譯的語句。 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 */根據原因代碼描述,修改語句、批次或程式,以避免重新編譯。 例如,預存程式可能包含一或多個
SET語句。 這些語句應該從程式中移除。如需重新編譯原因和解析的更多範例,請參閱 SQL Server 2005 中的批次編譯、重新編譯和規劃快取問題。 如需重新編譯的詳細資訊,請參閱 重新編譯執行計劃。
如果持續發生問題,請連絡 Microsoft 客戶支援服務。