【问题标题】:TX-row lock contention : Inserting Duplicate values for Unique KeyTX 行锁争用:为唯一键插入重复值
【发布时间】:2014-01-22 17:59:11
【问题描述】:

我们在尝试插入数据时遇到TX-row lock contention错误

在运行一个处理包含近 10000 条记录的 xml 并将数据插入到表中的作业时会发生这种情况

我们在表中的一列上有一个唯一键约束,并且在请求中我们得到了重复的值。这会导致锁定,因此作业需要更多时间。

我们正在使用休眠和弹簧。我们使用的DAO方法是使用Spring Transaction Manager的@Transactional注解的hibernate模板的'save'

有什么建议吗?

【问题讨论】:

  • 您是否有多个进程运行插入?
  • @DavidAldridge 没有一个
  • 你知道入队是什么模式吗?通常为 4 或 6 个。这些 TX 排队发生在两个会话之间,而不是在单个会话上(嗯,非常罕见)
  • while running a job - 请发布职位代码

标签: java oracle hibernate locking jobs


【解决方案1】:

不清楚您遇到的是锁定问题还是错误。

“TX-row lock contention”是一个事件,表明两个会话正在尝试将相同的值插入到主要或唯一约束列集中——直到第一个提交时才会引发错误,然后第二个得到错误。所以你肯定有多个会话插入行。如果您只有一个会话,那么您会立即收到错误消息,不会引发“TX-row lock contention”事件。

建议:

  1. 在没有约束的情况下插入临时表,然后使用消除重复的逻辑加载到实际表中
  2. 在读取 XML 时消除重复项。
  3. 使用 Oracle 的错误记录语法 -- 此处为示例。 http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9014.htm#SQLRF55004

【讨论】:

    猜你喜欢
    • 2018-03-03
    • 2017-10-14
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多