2011-09-11 45 views
1

我掙扎着甚至不應該的死鎖,因爲我正在運行批量刪除並插入表的互斥子集。 在多線程(每個線程訪問可能位於不同分區上的數據)上運行查詢時,死鎖看起來是不可避免的。分區會防止數據庫死鎖,當它們由否則會分成兩個分區的行引起時?

另請參閱this question以獲取有關此問題的更多詳細信息,但我更想知道如果建議使用分區來處理死鎖,則更一般地說。

回答

0

恕我直言,分配不會解決任何問題。對於死鎖情況的事件鏈基本上是:

T1: get lock L1; 
    get lock L2; 

T2: get lock L2; 
    get lock L1; 

如果T1和t2都是半路,每個都擁有一個鎖,則會發生死鎖。 如果L1和L2鎖引用不同表中的對象,則不會改變;只是導致死鎖的事件排序。

+0

如果分區使得我們有四個不同的鎖而不是2個(對於每個「子集」手動創建的表應該是這種情況),那麼它就可以工作。 –