2014-01-22 29 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