摘要:[SQL SERVER] infinite recompile 無限重新編譯 (SQL Server 2005)
狀況: 使用者反應速度很慢,請求協助,發現是SQL 2005機器 @@"
CPU很高,檢視ERROR LOG發現有非警示的訊息很多 , Windows Event Log也是
07/08/2015 11:10:21,spid282,未知,A possible infinite recompile was detected for SQLHANDLE 0x020000001596291BC68878997FA3CCF743DE38DC240E7933<c/> PlanHandle 0x060014001596291BB861D109000000000000000000000000<c/> starting offset 0<c/> ending offset -1. The last recompile reason was 2.
檢視MSDN如下
因此判斷SQL Server發生infinite recompile,原因是統計資訊不斷更新,因此執行計畫一直recompile,導致整體資料庫效能不佳
以下兩個建議方法可以避免infinite recompile的發生 (資料來源 : 官方 SQL 2005的白皮書)
1. 關閉自動更新統計資訊,可設定排成每日早上更新統計資訊
2. 在語法中加上OPTION(KEEP PLAN) , OPTION(KEEPFIXED PLAN) 可以避免當統計資訊更新時,就recompile