私はOrientDB(コミュニティ版2.2.9)を複数のノードを持つ分散モードで実行しています。OrientDBはロックレコードを無期限に保持します
数分後、私は私のクエリに次のエラーを取得を開始:
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';
レコードがロックされたままで、私ができますデータベースを再起動するまでクエリを実行しないでください。
分散モードでサーバーを実行していない場合は、このエラーが発生しないため分散モードで実行する必要があります。 "を除去することにより
....
<handler class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
<parameters>
....
<parameter value="com.orientechnologies.orient.server.distributed.conflict.ODefaultReplicationConflictResolver" name="conflict.resolver.impl"/>
....
</parameters>
</handler>
...
:ここ
は私のデフォルトの配布-DB-config.jsonは、私は私のorientdbサーバ-config.xmlに以下の設定を使用していた
{
"autoDeploy": true,
"readQuorum": 1,
"writeQuorum": 1,
"executionMode": "asynchronous",
"readYourWrites": true,
"servers": {
"*": "master"
},
"clusters": {
"internal": {
},
"*": {
"servers": ["<NEW_NODE>"]
}
}
}
ですODefaultReplicationConflictResolver "構成からのパラメタ、ロックの問題はあまり頻繁に発生しません。
なぜレコードがロックされているのですか?これを避けるにはどうすればよいですか?
実行モードを「同期」に設定すると、状況がさらに悪化します。私の頂点は常に古く、更新される状態にはなりません。 私はメッセージングサービスとしてrabbitMQでPyorientを使用しています。だから、rabbitMQは成功するまでレコードを書き続けるつもりです。問題は、レコードが決して解放されないということです。ロックを解除する唯一の方法は、OrientDBを再起動することです。 – anber
問題はpyorientまたはrabbitmqにある可能性があります。 –
私のサーバー上で混乱を招いていたものの組み合わせのようです。私はpyorientでメモリリークを取得し、それはほとんど応答の点まで私のドッキングマンを遅くしていた。これにより、接続フォームが正しく閉じられなくなる可能性があります。私はそれが理由だったのかどうかはわかりませんが、実行モードを「同期」として設定すると突然動作しました。ありがとう:) – anber