2014-01-22 61 views
0

試圖插入數據TX行鎖爭:爲唯一鍵插入重複值

運行,其處理XML幾乎10000記錄的工作,而它發生,我們已經看到了TX行鎖爭用錯誤,在將數據插入到表

我們正在對在該表中的列的一個獨特的鍵約束,並在請求我們正在重複的值。這導致了鎖,因此工作需要更多時間。

我們使用Hibernate和Spring。我們使用的DAO方法是休眠模板的「保存」與Spring事務管理的@Transactional

任何建議註解嗎?

+0

您是否有多個進程正在運行插入操作? –

+0

@DavidAldridge不只是一個 – Chillax

+0

你知道入列是什麼模式?通常爲4或6.這些TX隊列發生在兩個會話之間,而不是在單個會話中(很少,很少) –

回答

1

目前尚不清楚是否獲得鎖的問題或錯誤。

「TX行鎖定爭用」是一個事件,指示兩個會話嘗試將相同的值插入主要或唯一約束列集合中 - 第一個提交之前不會引發錯誤,然後是第二個得到錯誤。所以你肯定有多個會話插入行。如果你只有一個會話,那麼你會立即收到錯誤,並且不會引發「TX-row lock contention」事件。

建議:

  1. 插入到一個臨時表沒有約束,然後加載使用,消除了重複
  2. 消除重複作爲XML的讀取的部分邏輯的真正的表。
  3. 使用Oracle的錯誤日誌語法 - 例如在這裏。 http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9014.htm#SQLRF55004