java - Orientdb并发问题-获取服务器'node75'上的记录#46:0的锁定时超时(5000ms)。已被请求锁定0.324309

标签 java orientdb

我在分布式环境中使用orientdb 2.22,当我使用并发线程写入数据并且发生此类异常时

错误:

com.orientechnologies.orient.server.distributed.task.ODistributedRecordLockedException: Timeout (5000ms) on acquiring lock on record #46:0 on server 'node75'. It is locked by request 0.324309
    DB name="graphics"
    DB name="graphics"


下面是我的代码:

我将通过Java代码创建sql,然后使用java api来执行它。

Java代码:

OrientGraph graph = getOrientGraphTx();
graph.command(new OCommandScript(sql)).execute();


sql:

BEGIN <br/>
 LET a0 = CREATE EDGE tic FROM #17:0 TO #52:0<br/>
LET a1 = CREATE EDGE trip FROM #17:0 TO #28:0<br/>
LET a2 = CREATE EDGE tmtel FROM #17:0 TO #59:0<br/>
 COMMIT RETRY 0<br/>



RETURN [$a0, $a1, $a2]<br/>


我有一些问题:
一种。如果连接断开并且记录仍被锁定,是否可行?
b。锁将被释放多长时间?有什么办法可以解锁已记录的内容?
C。有什么更好的方法来避免此类exceptipn?

谢谢

最佳答案

如何复制它:

方案1:

我将复制配置为a同步模式。在我的应用程序中,我仅指向群集中的一个节点,例如remote:192.168.2.3/graphics,当我关闭该节点时,它会引发异常:

ODistributedRecordLockedException:获取服务器'node75'上的记录#46:0的锁定时超时(5000ms)。

在服务器端,精细日志显示:

2017-08-24 10:17:28:965 FINE [mac15]分布式事务0.1312:已取消(锁定= [] undo = 0 startsOn = Thu Aug 24 10:16:55 CST 2017线程= 12)[ODistributedTxContextImpl]

2017-08-24 10:17:28:965 FINE [mac15]分布式事务0.1312:在数据库'graphics'上回滚事务(undo = 0 tx = false)[ODistributedTxContextImpl]

2017-08-24 10:17:28:965 FINE [mac15]数据库“图形”上的分布式事务0.1322在32111ms后过期[ODistributedDatabaseImpl $ 8]

2017-08-24 10:17:28:965 FINE [mac15]分布式事务0.1322:已取消(锁定= [] undo = 0 startsOn = Thu Aug 24 10:16:56 CST 2017线程= 12)[ODistributedTxContextImpl]

2017-08-24 10:17:28:965 FINE [mac15]分布式事务0.1322:回滚数据库'graphics'上的事务(undo = 0 tx = false)[ODistributedTxContextImpl]

2017-08-24 10:17:28:965 FINE [mac15]数据库“图形”上的分布式事务0.1327在31518ms后过期[ODistributedDatabaseImpl $ 8]

2017-08-24 10:17:28:965 FINE [mac15]分布式事务0.1327:已取消(锁定= [] undo = 0 startsOn = Thu Aug 24 10:16:57 CST 2017线程= 12)[ODistributedTxContextImpl]

2017-08-24 10:17:28:965 FINE [mac15]分布式事务0.1327:回滚数据库'graphics'上的事务(undo = 0 tx = false)[ODistributedTxContextImpl]

2017-08-24 10:17:28:965 FINE [mac15]数据库“图形”上的分布式事务0.1337在30206ms后过期[ODistributedDatabaseImpl $ 8]
2017-08-24 10:17:28:965 FINE [mac15]分布式事务0.1337:已取消(锁定= [] undo = 0 startsOn = Thu Aug 24 10:16:58 CST 2017线程= 12)[ODistributedTxContextImpl]

2017-08-24 10:17:28:965 FINE [mac15]分布式事务0.1337:回滚数据库'graphics'上的事务(undo = 0 tx = false)[ODistributedTxContextImpl]

2017-08-24 10:17:28:965 FINE [mac15]数据库“图形”上的分布式事务0.1332在30967ms后过期[ODistributedDatabaseImpl $ 8]

2017-08-24 10:17:28:965 FINE [mac15]分布式事务0.1332:已取消(锁定= [] undo = 0 startsOn = Thu Aug 24 10:16:57 CST 2017线程= 12)[ODistributedTxContextImpl]

2017-08-24 10:17:28:965 FINE [mac15]分布式事务0.1332:在数据库'graphics'上回滚事务(undo = 0 tx = false)[ODistributedTxContextImpl]

2017-08-24 10:17:28:970 FINE [mac15]分布式事务:0.1562无法锁定记录[#20:-2,#26:0,#43:0,#53:0,#104:-5 ,#116:-4,#120:-3],因为归0.1563拥有(重试5/10,线程= 110)[ODistributedTransactionManager]

2017-08-24 10:17:28:971 FINE [mac15]分布式事务:0.1563无法锁定记录[#20:-2,#26:0,#43:0,#53:0,#104:-5 ,#116:-4,#120:-3],因为归0.1447所有(重试5/10,线程= 105)[ODistributedTransactionManager]

2017-08-24 10:17:28:971 FINE [mac15]在数据库“图形”上启动分布式事务...(reqId = 0.1565线程= 109)[ODistributedTransactionManager]

2017-08-24 10:17:28:971 FINE [mac15]分布式事务:数据库'graphics'中注册的请求0.1565(thread = 109)[ODistributedDatabaseImpl]

2017-08-24 10:17:28:976 FINE [mac15]分布式事务:0.1558无法锁定记录[#19:-2,#26:0,#43:0,#53:0,#101:-5 ,#114:-4,#117:-3],因为归其所有0.1560(重试9/10,线程= 113)[ODistributedTransactionManager]

2017-08-24 10:17:28:977 FINE [mac15]分布式事务:0.1564无法锁定记录[#19:-2,#26:0,#43:0,#53:0,#101:-5 ,#114:-4,#117:-3],因为归0.1560拥有(重试1/10,线程= 112)[ODistributedTransactionManager]

2017-08-24 10:17:28:977 FINE [mac15]分布式事务:0.1560无法锁定记录[#19:-2,#26:0,#43:0,#53:0,#101:-5 ,#114:-4,#117:-3],因为归0.1447所有(重试6/10,线程= 115)[ODistributedTransactionManager]

2017-08-24 10:17:29:025 FINE [mac15]分布式事务:0.1561无法锁定记录[#20:-2,#26:0,#43:0,#53:0,#104:-5 ,#116:-4,#120:-3],因为归0.1447所有(重试6/10,线程= 114)[ODistributedTransactionManager]

2017-08-24 10:17:29:030 FINE [mac15]分布式事务:0.1559无法锁定记录[#19:-2,#26:0,#43:0,#53:0,#101:-5 ,#114:-4,#117:-3],因为归0.1447所有(重试7/10,线程= 111)[ODistributedTransactionManager]

2017-08-24 10:17:29:067 FINE [mac15]分布式事务:0.1558无法锁定记录[#19:-2,#26:0,#43:0,#53:0,#101:-5 ,#114:-4,#117:-3],因为归0.1447所有(重试10/10,线程= 113)[ODistributedTransactionManager]

2017-08-24 10:17:29:067 FINE [mac15]分布式事务无法完成,请等待12ms然后重试(1/10)[ODistributedStorage]

关于java - Orientdb并发问题-获取服务器'node75'上的记录#46:0的锁定时超时(5000ms)。已被请求锁定0.324309,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45821426/

相关文章:

java - java 1.8 上的 maven-enunciate-plugin 作为 apt 现在已从最新的 JDK(即 java 注释处理工具)中删除

java - 在java中使用get参数获取所有值

orientdb - 与 OrientGraph 的嵌套事务

orientdb - 在 orientDB 中编写子查询

php - 如何从 orient db 获取 'SELECT' 数据并使用 php 显示它

orientdb - 以 "command style"格式导出OrientDB数据库结构

java - 如何保存字符串?

java - 在 Jersey 中使用名称绑定(bind)注释

java - 隐藏零值图表项的图例 javaFX

java - 如何使用 Spring Data 编写 OrientDB 更新查询