Java 如何避免informix中的锁异常

Java 如何避免informix中的锁异常,java,sql,informix,Java,Sql,Informix,我有一个uuid表,其中包含四列:id、uuid、used(true/false)和version,用于乐观锁定。大约有10000条记录。当我想将新的person插入表person时,我首先从表中读取未使用的uuid。然后我更新已经使用的记录并插入新的人员。但当我运行性能测试时,我对表uuid以及选择或更新记录有问题。有很多超时锁ISAM错误: Caused by: java.sql.SQLException: ISAM error: Lock Timeout Expired at co

我有一个uuid表,其中包含四列:id、uuid、used(true/false)和version,用于乐观锁定。大约有10000条记录。当我想将新的person插入表person时,我首先从表中读取未使用的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:?]
我怎样才能避免这个例外?Webhere中的隔离级别设置为事务\读取\提交
锁定模式等待设置为2s,表具有行锁定

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


此外,添加用户对我来说并不需要对并发活动进行大量性能测试。但是,如果要在另一个将被大量访问的表上使用此技术,则可能会遇到真正的问题。

什么类型的表锁定,页锁定还是行锁定?