簡體   English   中英

OrientDB無限期地鎖定記錄

[英]OrientDB keeps locking records indefinitely

我在具有多個節點的分布式模式下運行OrientDB(社區版本2.2.9)。

幾分鍾后,我的查詢開始出現以下錯誤:

com.orientechnologies.orient.server.distributed.task.ODistributedRecordLockedException: Timeout (1500ms) on acquiring lock on record #1010:2651. It is locked by request 3.1000 DB name="MyDatabase"

此實例中的查詢如下所示:

UPDATE #1010:2651 SET name='foo';

記錄保持鎖定狀態,直到重新啟動數據庫,我才能運行查詢。

如果不以分布式模式運行服務器,則不會收到此錯誤,因此它與以分布式模式運行服務器有關。

這是我的default-distributed-db-config.json

{
  "autoDeploy": true,
  "readQuorum": 1,
  "writeQuorum": 1,
  "executionMode": "asynchronous",
  "readYourWrites": true,
  "servers": {
    "*": "master"
  },
  "clusters": {
    "internal": {
    },
    "*": {
     "servers": ["<NEW_NODE>"]
    }
  }
}

我在orientdb-server-config.xml中使用以下配置:

    ....
    <handler class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
        <parameters>
            ....
            <parameter value="com.orientechnologies.orient.server.distributed.conflict.ODefaultReplicationConflictResolver" name="conflict.resolver.impl"/>
            ....
        </parameters>
    </handler>
   ...

通過從配置中刪除“ ODefaultReplicationConflictResolver ”參數,鎖定問題的發生頻率就會降低。

為什么記錄會像這樣鎖定,我該如何避免呢?

使用asynchronous執行模式可能會導致此問題。 請參閱: 異步復制模式

您可以嘗試更改執行模式或嘗試向查詢中添加重試。 使用Java:通過以下OCommandSQL方法,可以在異步復制期間捕獲命令事件:

  • onAsyncReplicationOk() ,以在異步復制成功時捕獲事件
  • onAsyncReplicationError() ,以在異步復制返回錯誤時捕獲事件

在創建邊並發修改異常的情況下,最多重試3次的示例:

g.command( new OCommandSQL("create edge Own from (select from User) to (select from Post)")
 .onAsyncReplicationError(new OAsyncReplicationError() {
  @Override
  public ACTION onAsyncReplicationError(Throwable iException, int iRetry) {
    System.err.println("Error, retrying...");
    return iException instanceof ONeedRetryException && iRetry<=3 ? ACTION.RETRY : ACTION.IGNORE;
  }
})
 .onAsyncReplicationOk(new OAsyncReplicationOk() {
   System.out.println("OK");
 }
).execute();

或在SQL Batch中添加重試:

begin
let upd = UPDATE #1010:2651 SET name='foo'
commit retry 100
return $upd

希望能幫助到你。

暫無
暫無

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

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