[SQL SERVER] infinite recompile 無限重新編譯

  • 499
  • 0
  • 2015-08-03

摘要:[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