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