2011-03-25 62 views
3

我目前正在調查我們SQL 2008數據庫中的一個問題,它始終顯示鎖定。它將運行良好數小時,然後突然使用該數據庫的所有應用程序將停止工作。現在已經發生了大約2周,在此之前沒有問題。當時沒有什麼改變,當然沒有什麼會導致這個問題。插入單行需要一個小時

我已經運行了SQL Profiler來試圖弄清楚發生了什麼。它顯示了全天每秒運行的數百個查詢沒有任何問題,然後突然間出現了10分鐘的差距,只有少數查詢已經運行。當時,我發現一個已經運行了一個多小時的插入查詢。同樣的查詢(但是不同的數據)在一些情況下都被凍結了的時候被認爲有數據庫鎖定。

通常我們要做的就是重新啓動sql server服務,很明顯,它可以擺脫任何鎖並殺死任何查詢,並且一切都會重新開始。然而,它然後再次停止,有時在一小時之內,其他幾個小時之後。

這是一個簡單的插入,基本上只是說「插入表(x,y,z)從源表中選擇x,y,x」。當我運行花費一個小時的語句的選擇部分時,它不需要時間來運行(字面意思是00:00:00),所以我不太明白髮生了什麼。

我們確實得到了一段時間的錯誤,表示其中一個表可能已損壞(不是插入語句的目的地或來源)。我們在該表上運行了DBCC命令,但沒有報告任何錯誤。

我將會看看運行該語句的.net應用程序,看看是否有任何導致它的東西,但它不太可能,並且想知道是否有人以前看過類似的東西,並知道是什麼可能是原因?

在此先感謝。

+0

這可能是與另一個腳本結合的腳本的死鎖嗎?此外,該表是否有任何觸發器或與之不一致的東西? – 2011-03-25 09:48:34

+0

聽起來像死鎖。發生這種情況時,您是否嘗試過運行'sp_lock'? – Blorgbeard 2011-03-25 09:49:17

+0

偶爾會遇到有關死鎖的錯誤,告訴我們查詢是死鎖的受害者,但據我所知,這已經持續了很長時間,沒有整個數據庫鎖定。 – user676437 2011-03-25 09:55:03

回答

4

服務器會告訴你爲什麼它在等待,如果你問它正確的問題。查看sys.dm_exec_requests和sys.dm_os_waiting_tasks,瞭解掛起的session_id並查看它正在等待的內容。這可能會讓你對發生的事情有所瞭解。

+0

非常好,聽起來可能會告訴我們一些有用的東西。 一如既往,自從我發佈我的消息以來,它一直沒有再發生,所以只是等待看看它是否再次發生。 希望儘快出現問題是否是錯誤的? :) – user676437 2011-03-25 13:41:31

+1

另外我還會下載Adam Machanic的sp_WhoIsActive,並在這個查詢往南的時候運行它。他爲這個工具投入了大量工作。您只需查看DMV的原始輸出即可獲得更多信息。 http://sqlblog.com/blogs/adam_machanic/archive/2009/12/03/who-is-active-v9-57-fast-comprehensive-dmv-collection.aspx – 2011-03-25 15:00:39

+0

感謝量子精靈,會給你一個去的時候它再次凍結。 – user676437 2011-03-28 08:53:04

相關問題