gpt4 book ai didi

java - informix中如何避免锁异常

转载 作者:行者123 更新时间:2023-12-04 18:06:05 27 4
gpt4 key购买 nike

我有一张 uuid 表,其中包含四列:id、uuid、used(true/false) 和用于乐观锁定的版本。大约有10000条记录。当我想将新人插入表人时,我首先阅读了表中未使用的 uuid。然后我更新这个已经使用的记录并插入新的人。但是当我运行性能测试时,我遇到了表 uuid 以及选择或更新记录的问题。有很多超时锁ISAM错误:

Caused by: java.sql.SQLException: ISAM error: Lock Timeout Expired
at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:413) ~[ifxjdbc.jar:?]
at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3982) ~[ifxjdbc.jar:?]
at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2698) ~[ifxjdbc.jar:?]
at com.informix.jdbcx.IfxXASqli.receiveMessage(IfxXASqli.java:116) ~[ifxjdbcx.jar:?]
at com.informix.jdbc.IfxSqli.executeCommand(IfxSqli.java:939) ~[ifxjdbc.jar:?]
at com.informix.jdbc.IfxResultSet.b(IfxResultSet.java:304) ~[ifxjdbc.jar:?]
at com.informix.jdbc.IfxStatement.c(IfxStatement.java:1283) ~[ifxjdbc.jar:?]
at com.informix.jdbc.IfxPreparedStatement.executeUpdate(IfxPreparedStatement.java:421) ~[ifxjdbc.jar:?]
at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteUpdate(WSJdbcPreparedStatement.java:1187) ~[com.ibm.ws.runtime.jar:?]
at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate(WSJdbcPreparedStatement.java:804) ~[com.ibm.ws.runtime.jar:?]

如何避免这种异常? webshere 中的隔离级别设置为 TRANSACTION_READ_COMMITTEDlock mode wait设置为2s并且table有row lock

最佳答案

2 秒超时非常非常短。您使用多少个并发线程进行测试?我敢打赌你几乎没有时间在 2s 到期之前提交。使用 30s,并修改代码以从 uuid 表中获取下一个值并尽快提交!不要执行其他工作。我建议分配一个新的 uuid,插入新的用户行并提交。然后继续其他工作。

此外,添加用户并没有让我觉得需要对并发 Activity 进行大量性能测试。但是,如果您打算在另一个将被频繁访问的表上使用此技术,您可能会遇到真正的问题。

关于java - informix中如何避免锁异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26384146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com