我有沒有主鍵的表。但它在4列上有非唯一聚集索引。在更新表中的一個非關鍵列時,我們看到這個索引是死鎖的一部分。 我們如何避免這種情況?創建包含5列的主鍵還是添加標識列更好?我們可能還需要創建非聚集索引,以便在刪除現有聚集索引後提高性能。如何避免死鎖中的非唯一聚簇索引
回答
死鎖分辨率的最佳資源(仍然是)在這裏:http://blogs.msdn.com/b/bartd/archive/2006/09/09/deadlock-troubleshooting_2c00_-part-1.aspx。
點號4表示:
運行涉及通過數據庫引擎優化顧問 僵局查詢。在Management Studio查詢窗口中填入查詢,將 數據庫上下文更改爲正確的數據庫,右鍵單擊查詢文本並選擇「分析DTA中的查詢」。不要跳過這一步;我們所看到的死鎖問題的一半以上的一半是通過簡單地添加 適當的索引來解決的,以便其中一個查詢運行得更快,並且具有更小的鎖定佔用空間的 。如果DTA建議索引(它會說 「估計的改進:%」),創建它們並監視到 查看死鎖是否持續。您可以從操作下拉菜單中選擇「應用建議」 以立即創建索引,或者 將CREATE INDEX命令另存爲腳本,以在 維護時段內創建它們。請務必分別調整每個查詢。
我知道這並不「回答」的問題爲什麼必然,但它確實表明,添加索引可以改變的方式執行,使任一鎖定足跡較小或執行時間快,可顯著降低陷入僵局的可能性。
謝謝LS!我嘗試運行DTA,我選擇了導致死鎖的整個MERGE語句,但它在建議中沒有顯示任何內容。 –
我創建了一個新的標識列,並創建了主鍵和聚集索引。將現有的聚集索引更改爲非聚集索引。現在鎖模式爲X的聚簇索引發生死鎖。我們如何避免這種情況? Web服務創建多個線程並調用具有導致死鎖的合併語句的SP。 –
只有一種(簡單的)方法可以100%確定你無法通過此過程獲得死鎖,並且可能會向MERGE添加TABLOCKX提示,但這可能會對性能造成非常不利的影響。 但是,添加TABLOCK提示可能足以解決問題,而不會對性能造成太大影響。 最後,您還可以嘗試添加PAGLOCK,XLOCK或PAGLOCK和XLOCK。再說這可能會起作用,並且性能可能不會太糟糕。你必須嘗試看看。 –
- 1. 聚簇索引和非聚簇索引
- 2. 非主鍵列上的聚簇索引或非聚簇索引?
- 3. SQL Server中唯一標識符列上的聚簇/非聚簇索引
- 4. MySql錯誤1064唯一聚簇索引
- 5. SQL Server非聚簇索引
- 6. 具有非聚簇索引但沒有聚簇索引
- 7. 獨特VS非唯一聚簇索引,以加快對非唯一場
- 8. 對兩列組合的唯一約束非聚簇索引
- 9. 非唯一列上的SQL Server聚簇索引
- 10. 非唯一鍵上的sql server聚簇索引
- 11. 非唯一列上的SQL Server聚簇索引
- 12. 如何執行非聚簇索引查找而不是聚簇索引掃描
- 13. 如何避免mysql死鎖?
- 14. 更改sybase中的非聚簇索引
- 15. 索引視圖的兩列上的唯一聚簇索引
- 16. 聚簇索引
- 17. 如何用非聚集索引查找或聚簇索引查找替換聚簇索引掃描?
- 18. 應將主鍵聚簇索引列添加到非聚簇索引中?
- 19. 唯一聚簇索引 - 我可以創建非唯一而不丟失/創建
- 20. 保存B +樹的聚簇索引和非聚簇索引的位置?
- 21. 避免螺旋鎖死鎖
- 22. 如何在.NET中避免死鎖
- 23. SQL Server性能:非聚簇索引+ INCLUDE列與聚簇索引 - 等效嗎?
- 24. 儘管有聚簇索引,SQL Server仍在使用非聚簇索引
- 25. 混淆了聚簇索引和非聚簇索引。包含5個疑問
- 26. 複合羣集PK行爲與非羣集PK +非唯一聚簇索引
- 27. Sybase非聚簇索引選擇
- 28. 具有聚簇唯一索引的非空列。爲什麼需要主鍵?
- 29. 交易 - 如何避免死鎖?
- 30. 如何避免死鎖條件
有相當多的是我的腦海裏來(身份+非聚集索引,身份+非聚集索引與包括複合PK)的幾個解決方案。答案取決於你的要求和數據結構。他們唯一的共同點就是:你應該給PK表。您的問題無法用現有信息回答。 – Sefe