簡體   English   中英

如何避免Informix中的鎖定異常

[英]How to avoid lock exception in informix

我有一個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:?]

我如何避免這種異常? 網站的隔離級別設置為TRANSACTION_READ_COMMITTED鎖定模式,等待時間設置為2s,並且表具有行鎖定

2秒超時非常非常短。 您正在使用多少個並發線程進行測試? 我敢打賭,您幾乎沒有時間在2s到期之前提交。 使用30s,並修改您的代碼以從uuid表中獲取下一個值,並盡快提交! 不要執行其他工作。 我建議分配一個新的uuid,插入新的用戶行並提交。 然后繼續其他工作。

此外,添加用戶並不會令我感到震驚,因為需要對並發活動進行嚴格的性能測試。 但是,如果要在將大量訪問的另一個表上使用此技術,則可能會遇到真正的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM