2010-11-04 41 views
0

當我試圖調用特定的存儲過程時,我在應用程序中收到了一些超時。我將它分離爲一個特定的sproc,並發現當我使用參數在該sproc中調用tablevalued函數時,它會永遠運行。但是如果我傳遞一個特定的值(如804),它會很快返回。表值函數真的很奇怪問題

如果我自己運行它的參數它運行良好,但是當我將它添加回查詢與參數運行永遠....然後換出一個靜態值的參數,它會很快運行?

步驟我已經採取了:

  1. 丟棄的過程並重新創建。
  2. 然後DBCC FREEPROCCACHE包含一個類似的查詢字符串的所有計劃。
  3. 只是一個測試分貝,所以我用昨晚的備份恢復了數據庫。

另一件要注意的事情。在同一臺服務器上的另一個數據庫上......運行的數據量相同......非常奇怪。

我在忽略什麼?我真的不明白。

+0

相關的問題在這裏:http://stackoverflow.com/問題/ 866722/t-sql-process-design-and-execution-plan-udf-parameter-sniffing – JNK 2010-11-04 19:49:32

+2

確保函數參數和SP參數的數據類型相同。同時檢查兩種情況下的執行計劃。 – 2010-11-04 19:51:16

+0

@amit_g:應該做出答案。這是一個有效的觀點。 – gbn 2010-11-04 19:52:26

回答

1

Parameter sniffing

對不起,我簡單的回答,但值得一讀一些答案......

從我以前太

+1

我鏈接到您回答的相關問題。 – JNK 2010-11-04 19:50:42

+0

謝謝你們,我會看看...我很欣賞這些反饋。 – scarpacci 2010-11-04 20:40:28

+0

對我的觀點中的其中一個基表進行了統計。再次感謝您的信息。 – scarpacci 2010-11-04 20:46:06