當我試圖調用特定的存儲過程時,我在應用程序中收到了一些超時。我將它分離爲一個特定的sproc,並發現當我使用參數在該sproc中調用tablevalued函數時,它會永遠運行。但是如果我傳遞一個特定的值(如804),它會很快返回。表值函數真的很奇怪問題
如果我自己運行它的參數它運行良好,但是當我將它添加回查詢與參數運行永遠....然後換出一個靜態值的參數,它會很快運行?
步驟我已經採取了:
- 丟棄的過程並重新創建。
- 然後
DBCC FREEPROCCACHE
包含一個類似的查詢字符串的所有計劃。 - 只是一個測試分貝,所以我用昨晚的備份恢復了數據庫。
另一件要注意的事情。在同一臺服務器上的另一個數據庫上......運行的數據量相同......非常奇怪。
我在忽略什麼?我真的不明白。
相關的問題在這裏:http://stackoverflow.com/問題/ 866722/t-sql-process-design-and-execution-plan-udf-parameter-sniffing – JNK 2010-11-04 19:49:32
確保函數參數和SP參數的數據類型相同。同時檢查兩種情況下的執行計劃。 – 2010-11-04 19:51:16
@amit_g:應該做出答案。這是一個有效的觀點。 – gbn 2010-11-04 19:52:26