讓我們:跨數據庫的存儲過程的性能2008
- $ DB的SQL Server數據庫
- $ DBSP1含引用$ DB
- $ DBSP2存儲過程的SQL Server數據庫是完全一樣$ DBSP1
- $ SP是一個存儲過程
從C#代碼在$ DBSP1運行$ SP大約需要1.5秒。
在$ DBSP2上從C#代碼運行$ SP約需0.5秒。
C#代碼非常簡單,使用SqlClient的默認參數。
當我在$ DBSP1和$ DBSP2的SQL控制檯中執行$ SP時,它需要0.4s。
兩個代碼數據庫之間的唯一區別是$ DBSP1正在生產中,並且已加載一點,而$ DBSP2處於空閒狀態。代碼數據庫中沒有數據,只有$ DB的存儲過程和視圖。
有人可以提出原因,爲什麼會發生這種情況?由於所有的工作都是在$ DB中進行的,在這兩種情況下都是同樣加載的,所以我期望表現會類似。
有趣。在排除機器或網絡性能問題方面,從每臺計算機上的SQL控制檯運行是一個很好的步驟。 「在C#代碼中$ DBSP1上運行$ SP需要大約1.5秒 從C#代碼$ DBSP2上運行$ SP大約需要0.5s。」 你看起來很徹底,所以請原諒我,如果這個問題是補救。當你這麼說 - 是頁面或函數的總執行時間?或者是具體陳述需要的具體時間? – 2009-07-24 14:44:21
C#執行時間度量運行存儲過程的SqlCommand Open()和ExecuteNonQuery()的總和。 我忘了確切地說,所有的數據庫都在同一臺機器上。 – pmezard 2009-07-24 14:48:48
@John Booty:「在C#代碼上運行$ DBSP1上的$ SP約需要1.5秒,從C#代碼運行$ DBSP2上的$ SP大約需要0.5秒。」這正是錯誤的參數嗅探和舊統計的症狀。 – 2009-07-24 14:49:47