SQL Server dead-lock 分析

來源:互聯網
上載者:User

你有時候就你喜歡的書。 --馮唐

1.      SqlServer發生dead-lock 事件,主要是因為存在兩個線程分別佔有某個資源的獨佔鎖,然後這兩個線程再去擷取對方擁有的資源的獨佔鎖。這樣就導致了dead-lock發生。

 

2.      SqlServer 在遇到dead-lock後,會從兩個線程中選取一個線程作為winner,winner的事務接著執行,另個線程則會成為loser,loser的事務則會rollback,對於loser,SqlServer則會給返回一個error message給應用程式,如果應用程式健壯,會處理這個error,得到了這個dead-lock error,則會再次提交剛才失敗的交易。如果沒有處理,則會出現錯誤。

 

3.    在SqlServer中可以利用Sql Server Profiler 來跟蹤死結的發生。具體過程如下:

         3.1 選擇相關事務,如:

 

         若sql server 遇到死結,列表中的事件就會被觸發,從而可以跟蹤判斷是什麼原因導致了dead-lock發生。

         3.2 運行跟蹤

         需要將教務系統中遇到的dead-lock情況再次複現。讓sql Server profiler來捕獲。

        

         3.3   分析跟蹤

         再擷取到dead-lock的現象後,可以在profiler看到類似於下面這樣的圖:

 

 

其中圖中可以看出,第9行出發了dead-lock events,可以看到具體的描述資訊。在第13,14行可以看出,其中一個事務被強制rollback,另一個事務繼續執行。其中第11行可以點擊查看更詳細的資訊。看出具體是什麼sql語句導致dead-lock,兩個事務是在擷取什麼資源時發生dead-lock。

 

         3.4   擷取到這些資訊之後,再結合具體的代碼邏輯,做進一步的深入分析。

 參考文檔:

http://www.simple-talk.com/sql/learn-sql-server/how-to-track-down-deadlocks-using-sql-server-2005-profiler/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.