2009-10-16 15 views
1

如果我運行在Management Studio(SQL Server 2008中)如下:SP超時,沒有Management Studio中

exec [USP_CNT_BookingDetail_ExtractAccountingPlanData] '4AFD6633-CB90-4165-913D-EE3EA74708DA', '7EF7CCB2-E09F-4408-AE2D-F857C063F2C1' 

我得到的結果早在不到一秒鐘的

我但是我運行它在VB.Net這樣的:

Using aConnection = New System.Data.SqlClient.SqlConnection(*** Some Connection String ***) 
    aConnection.Open() 
    Dim aCmd = aConnection.CreateCommand() 
    aCmd.CommandText = "exec [USP_CNT_BookingDetail_ExtractAccountingPlanData] '4AFD6633-CB90-4165-913D-EE3EA74708DA', '7EF7CCB2-E09F-4408-AE2D-F857C063F2C1'" 
    aCmd.ExecuteNonQuery() 
    aConnection.Close() 
End Using 

超時(我知道,ExecuteNonQuery不返回數據,但我想保持代碼儘可能小)。

我已經在代碼中使用了與Management Studio中相同的DB,UserID和密碼隔離級別爲Comdings。

有人有什麼想法嗎?

+0

[應用程序運行緩慢,SSMS運行速度快嗎?瞭解性能之謎](http://www.sommarskog.se/query-plan-mysteries.html) – 2011-04-07 19:13:30

+0

您是否已經提高了CommandTimeout以查看proc是否會最終返回?例如你肯定知道proc正在運行,但通過VB只是很慢。 – jasonk 2011-04-07 19:50:08

+0

您是否檢索並比較了執行計劃? – 2011-04-07 20:11:57

回答

0

使用SET ARITHABORT ON;解決了這個問題。

+0

你應該閱讀這篇文章。 http://www.sommarskog.se/query-plan-mysteries.html – 2011-04-08 11:23:20

1

嘗試啓用SQL事件探查器並比較兩次調用期間正在處理的內容。

此外,在Management Studio中測試你的程序之前運行這些命令:

CHECKPOINT 
DBCC DROPCLEANBUFFERS 

這些命令將確保在運行該程序的SSMS的測試是得到一個新的開始。很有可能,而不是你的VB.NET給出了一個錯誤的慢結果,你的SSMS測試由於之前的執行而給出了一個錯誤的快速結果。

CHECKPOINT
DROPCLEANBUFFERS
SO post on subject

+0

我原以爲這個問題會更有可能成爲參數嗅探。 – 2011-04-07 20:30:42

+0

即使他在兩個地方傳遞相同的參數值?沒有參數時我自己看到了問題。 – MartW 2011-04-08 07:10:57

+0

@CodeByMoonlight - 是的。 SSMS對'ARITH_ABORT'的默認值不同於'.NET'的代碼(這使得**沒有任何功能影響,因爲SET'ANSI_WARNINGS'在SQL Server上的行爲就好像是'ARITH_ABORT'一樣)。這只是一個計劃緩存鍵的效果,因此通常有人會注意到應用程序正在運行,將具有相同參數的查詢複製並粘貼到SSMS中,並發現它運行速度很快(因爲查詢剛剛使用這些參數值編譯)。然後,他們可能會關閉SSITH中的ARITH_ABORT,並發現它運行緩慢,所以它看起來...... – 2011-04-08 11:20:11

-1

可以將您的CommandText變成一個簡單的查詢 「UPDATE TableABC SET字段1 =字段1 WHERE ID = XYZ」,看它是否是PROC或連接字符串本身。我的猜測是proc很好,conn中可能有些東西。

相關問題