[SQL SERVER] 什麼是參數探測 (Parameter Sniffing) ,參數嗅探

  • 4348
  • 0
  • 2015-08-10

摘要:[SQL SERVER] 什麼是參數探測 (Parameter Sniffing)

一般來說Stored procedure在第一次執行時,會把compile好的plan丟到plan cache裡面

下一次執行時,會從cache裡面取出,再次使用,讓資料庫減少compile的動作

這時候就會出現參數探測(parameter sniffing)這種潛在問題

因為可能因為參數的差異導致結果集差異過大,而非最佳化的效率

 

例如:

某一stored procedure可能是查詢訂單細目資訊,而參數為日期

平時只會執行當日一天的結果,但是如果查詢為數年的結果

可能因為使用了一日結果的plan,導致效率很差

 

解決方式

  • OPTION (RECOMPILE)
  • OPTION (OPTIMIZE FOR (@VARIABLE=VALUE))
  • OPTION (OPTIMIZE FOR (@VARIABLE UNKNOWN))
  • Use local variables

 

 

寫到一半..............晚點補充