MSSQLSERVER_2814
詳細資料
產品名稱 |
SQL Server |
產品版本 |
10.50 |
產品組建編號 |
|
事件識別碼 |
2814 |
事件來源 |
MSSQLSERVER |
元件 |
SQLEngine |
符號名稱 |
PR_POSSIBLE_INFINITE_RECOMPILE |
訊息文字 |
偵測到 SQLHANDLE %hs、PlanHandle %hs、起始位移 %d、結尾位移 %d 可能發生無限重新編譯。上次重新編譯的原因是 %d。 |
說明
一或多個陳述式導致此查詢批次重新編譯至少 50 次。為了避免進一步重新編譯,您應該更正指定的陳述式。
下表列出重新編譯的原因。
原因代碼 |
說明 |
---|---|
1 |
結構描述已變更 |
2 |
統計資料已變更 |
3 |
延遲編譯 |
4 |
Set 選項已變更 |
5 |
Temp 資料表已變更 |
6 |
遠端資料列集已變更 |
7 |
For Browse 權限已變更 |
8 |
查詢通知環境已變更 |
9 |
資料分割檢視已變更 |
10 |
資料指標選項已變更 |
11 |
已要求選項 (重新編譯) |
使用者動作
您可以執行下列查詢來檢視導致重新編譯的陳述式。請將 sql_handle、starting_offset、ending_offset 和 plan_handle 預留位置取代成錯誤訊息中指定的值。請注意,特定和準備 Transact-SQL 陳述式的 database_name 和 object_name 資料行將成為 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 (sql_handle) AS st
WHERE qs.statement_start_offset = starting_offset
AND qs.statement_end_offset = ending_offset
AND qs.plan_handle = plan_handle;
為了避免重新編譯,請根據原因代碼的說明,修改陳述式、批次或程序。例如,一個預存程序可能會包含一或多個 SET 陳述式。您應該從此程序中移除這些陳述式。如需重新編譯原因和解決方案的其他範例,請參閱<SQL Server 2005 中的批次編譯、重新編譯及計畫快取問題>(英文)。
如果持續發生問題,請連絡 Microsoft 客戶支援服務。