2010-10-23 54 views
-1

我有一個奇怪的情況。我有不斷被我們的代碼的不同部分和數以千計的客戶訪問的表,所以我們在做簡單的更新和插入表時使用了事務。問題是我們不斷收到死鎖錯誤。任何人有任何想法如何我可以緩解這個問題?需要死鎖幫助

+2

,如果你有 「數以千計的客戶,」 我建議你花錢找人來幫助你解決你的問題 – 2010-10-23 17:17:53

+0

你給我覺得你的問題太抽象描述了。你如何檢測到什麼地方發生了死鎖?你如何訪問數據庫(LINQToSQL,DBAdapters或其他)?你使用什麼:你是否實現了syncronized訪問還是樂觀併發?提供更多的細節。 – 2010-10-23 17:20:44

+0

我接受率?我需要關於如何解決僵局問題的建議。我正在努力解決問題,但遇到困難,需要幫助解決問題時可能採取的其他措施。 – Kobojunkie 2010-10-23 17:21:17

回答

4

死鎖可能出現的原因有很多和它們的組合:

  • 可憐的架構設計

  • 不適合您的查詢索引 工作量

  • 寫得不好TSQL

  • 進取事務隔離級別和/或長時間運行的開放式轉換sactions

  • 普爾應用訪問模式

  • 低規格或配置不正確 硬件

所有這些是常見的。

我建議你閱讀

+0

將與此合作。我沒有編寫代碼,但我要調試它,這就是爲什麼我需要這方面的幫助。我嘗試使用thread.sleep方法,使用了一個transactionscope對象,但這並沒有太大幫助,因此我向那些更熟悉處理這種情況的人尋求幫助 – Kobojunkie 2010-10-25 22:19:56

+0

我確實有一個問題,那麼打開Row Versioning ?這會有幫助嗎? – Kobojunkie 2010-10-25 23:11:56

4

這個問題並不特別 - 當開發人員不太瞭解鎖定工作原理時,通常會發現這個問題,並且只是將事務視爲「黑盒子」,並期望他們的解決方案能夠擴展。

米奇在關於支付專家的評論中是正確的 - 這對於任何解決方案都是太大的問題。您將需要設置導致死鎖的查詢痕跡,並且您將不得不分析從索引到表設計,事務隔離級別以及查詢模式的所有內容。

我建議從SQL Server Profiler開始並設置一個會生成死鎖圖的跟蹤。這至少可以識別你的問題查詢和死鎖的資源。設置另一個跟蹤查詢緩慢的查詢(> 100ms)並加快速度。查詢運行時間越長,爭用鎖定的概率就越高。

+0

另外,請注意,SQL Profiler在新手的手中可能會讓事情變得更糟...... – 2010-10-23 17:30:07

+0

你必須學習一段時間吧? :-) – 2010-10-23 17:51:56

+1

我微笑,因爲它不是我的系統 – 2010-10-23 17:52:11