2012-02-06 81 views
3

遇到了一個問題,我希望有人能幫助給我一些方向。 在.NET 3.5和NHibernate 1.2上處理幾年的應用程序。 過去一週,交易似乎隨機鎖定,一直有問題。我注意到NH有一個100000的command_timeout。現在我已經把它降到了30,因爲100000看起來很瘋狂!問題仍在發生。NHibernate SQL Server掛起進程

的SQL Server活動監視器顯示時出現問題,通常處於暫停狀態的阻塞事務。如果我殺死阻塞進程,那些進程被阻止,並且系統沒有問題。

運行在阻擋過程的檢查,我可以看到正在執行的大約SQL語句,是造成問題,但它是通過多系統的執行,在大多數的網頁在檢索普通數據的聲明。

我覺得怎麼樣可能造成的?沒有什麼明顯的...我們確實發佈了一些小的改變,但是沒有一個應該有這個效果。 Windows更新/服務包最近也在同一時間安裝。 SQL/.NET SP更新可能是導致此問題的原因?

我知道有很多在這裏,但試圖給像我一樣擁有的時刻。

新信息: 現在command_tinmeout已更新爲30秒,超過此執行時間的查詢會自動終止 - 或者我在活動監視器中看到。但是,似乎還有其他事情正在進行,因爲重複查詢也會因超時而失敗。但是,如果我停止並啓動應用程序池,則至少在一段時間內,所有內容都按常規開始工作。

回答

1

當你說這是你所看到的是阻塞之一,因爲它通常執行的是最有可能是非常常見的查詢,因此是最有可能是一個等待數據庫鎖。

什麼隔離級別是在運行的數據庫,如果它的開箱即用的設置是在大多數情況下是非常可行的性能,其切換到快照隔離避免讀者等待作家。 More info on Snapshot isolation

考慮到造成這種情況的原因,可能是您引入了一些緩慢的寫入查詢,您的數據變大或者您的數據中突然出現大量碎片。

+0

感謝您的信息。它看起來好像是有問題的查詢主要是一個select查詢,並且在任何時候最多可以從表中讀取最多3行。什麼是檢查慢寫查詢的最佳方法? – TheITGuy 2012-02-06 19:01:53

+0

這取決於它很容易重現。 ín活動監視器尋找被列阻塞,然後你可以看到你的選擇正在等待什麼,另一種選擇是跟蹤或查看SQL服務器中的DMV中的歷史記錄 – jakobandersen 2012-02-07 05:55:10