2012-05-14 77 views
2

最近我每天都會隨機地看到一次或兩次的死鎖,所以我查看了代碼&,我們將代碼放在一個單獨的事務中。同時,我想在Oracle上將ini_trans增加到5,以便處理併發訪問。該應用程序使用調用「app_admin」模式的「app_user」模式(app_admin擁有該表),該數據庫同時由多個應用程序實例同時訪問。我應該增加app_user或app_admin上的ini_trans嗎?謝謝。Oracle死鎖

+0

1)你的錯誤信息究竟是什麼? 2)你看過爲死鎖生成的跟蹤文件嗎?它會告訴你涉及哪些對象。 3)你確定它不是由你的代碼以不一致的順序請求資源引起的嗎?我看到很多死鎖,但從來沒有因爲一些Oracle設置太低。 –

+0

1. SQL錯誤:60,SQLState:61000 ORA-00060:在等待資源時檢測到死鎖 無法使數據庫狀態與會話同步 org.hibernate.exception.LockAcquisitionException:無法執行JDBC批更新2.是的,有一個涉及的對象,我修復了代碼以處理單個事務中的所有事情,只是爲了確保它不會導致應用程序。 3.在一段時間內,該區域沒有任何代碼更改,並且在增加了對強制數據完整性的數據庫的限制之後突然開始發生代碼更改。謝謝。 – user1388356

+0

你添加了什麼樣的限制?你有沒有添加任何新的索引?如果查詢計劃在執行期間發生更改,則完全相同的查詢可能會造成死鎖。例如,一個會話使用全表掃描並以A B的順序更新行。而另一個會話使用索引並按B A的順序更新行。 –

回答

1

我認爲它應該是MAXTRANS,你會想要考慮修改,而不是INITRANS,但在10.2以上它已被棄用,默認情況下使用值255。

有任何位圖索引?它們有利於引起爭論。

+0

沒有位圖索引,只是只有常規索引。我正在閱讀這個http://www.dba-oracle.com/t_initrans.htm頁面,並認爲我必須增加INITRANS。我在使用Oracle 10g時,檢查了ini_trans = 1和max_trans = 255的查詢。 1.我應該更換ini_trans或max_trans?和2.這兩個最好的價值是什麼?謝謝。 – user1388356

+0

您認爲有多少用戶會同時訪問表中的塊? –

+0

併發性由JBOSS容器管理的持久性來處理,可能大致我們有50或100個JMS實例。所有實例都將使用相同的用戶「app_user」模式來訪問app_admin表。 – user1388356

2

Here描述了該問題的可能原因。以下建議幫助我:「索引外鍵和死鎖消失」。檢查引用到您的表的外鍵,並嘗試爲它們編制索引。