2011-06-17 44 views
0

一般來說,如何在生產環境中將我的本地開發環境中發生的數據庫超時問題重新創建?生產環境中的數據庫超時問題

我的前端C#應用程序調用在生產中獲取數據庫超時的存儲過程。這些數據庫超時問題非常時斷時續。我嘗試使用Begin Transaction鎖定表,但它不起作用,因爲SQL語句在表名旁邊有「nolock」。

回答

1

在嘗試在您的開發環境中重新創建錯誤之前,您需要進行一些調查以確定性能問題最可能發生在產品中的哪個位置。

當您意識到prod中發生的問題時,可以利用SQL Server中的活動監視器瞭解哪些進程被阻止,以及哪些進程被阻止。我過去曾用它來追蹤有問題的查詢。

0

你可能會很難重現它在您的本地開發環境,除非它是一個精確鏡像(用戶,數,業務量,數據量等)

我會建議是打開分析器並查看在您的產品環境中發生超時問題時是否可以確定發生了什麼。 Onve您已經確定了您可能能夠在您的開發環境中重現發生了什麼事情,並找出原因是什麼。

的東西,讓你開始使用Profiler:

http://msdn.microsoft.com/en-us/library/ms187929.aspx

+0

跟蹤很好,但在非常繁忙的生產服務器上,應該非常小心地使用它。服務器端跟蹤會比客戶端跟蹤造成更少的性能問題,但需要更多工作來設置。在任何一種情況下,都必須使用良好的過濾器來追蹤最小事件集合。 – ErikE

0

這將可能是相當困難的獲得你的開發環境相同的超時。 您需要使用與生產服務器上相同類型的hw和相同的負載。

的時間了最有可能的原因如下: 1)死鎖 2)缺失索引 3)糟糕的查詢計劃

如果你確切地知道參數(其值)在發送給存儲過程可以使用SQL Managemnt studio或simular工具查看查詢計劃。 如果您運行的是SQL 2008,那麼查詢分析會告訴您是否缺少索引。

如果參數變化很大,可以強制SQL服務器每次創建一個新的auery計劃,方法是在存儲過程中添加並重新編譯

如果查詢計劃看起來不錯並且很花哨,則需要在服務器上添加一個跟蹤並查找存儲過程中涉及的表的鎖。

相關問題