問題タブ [pessimistic-locking]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
symfony - ドクトリンでロックされたエンティティのプロパティを取得できるのに、このエンティティを別のエンティティに設定できないのはなぜですか?
質問があります。これを行う悲観的な書き込みロックされたエンティティからプロパティを取得できる理由を理解したいと思います:
しかし、私はそれを作ることができません:
悲観的な読み取りロック モードでは機能しますが、悲観的な書き込みモードでは機能しません。
書き込みモードで読み取ることができるが、別のエンティティに設定できない理由を誰かが知っていますか?
すべてのアプリケーションのモードを変更できない原因を修正する方法はありますか?
ruby-on-rails - Railsトランザクションのデッドロックか何か
Rails アプリに、、、およびモデルがUser
ありますOrder
。と の間には多対多の関係があり、 と と の間には1対多の関係があります。Contest
Position
User
Order
Position
Order
User
Contest
execute
注文を処理するメソッドを備えた注文処理サービスがあります。競合状態を防ぐために、lock!
内部でトランザクションを使用します。
問題は、引数の順序が同じである 2 つ以上のexecute
メソッドを同時に呼び出すと、デッドロックが発生することがあることです。最も奇妙なことは、最初のメソッドが実行を開始し、2 番目のメソッドがロック解除の命令を待っていることです。すべて期待どおりです。しかし、私の最初の方法(実行中)は途中でロックしています。さらに奇妙なのは、ロックされたレコードが処理されていない行でメソッドがロックされていることです。さらに、関連のない行をコメントすると、メソッドが永久に実行されている行がランダムに変更される可能性があり、変更されていない行、またはロックされたレコードを使用していない行がロックされている場合もあります (常にではありません)。
これが私のexecute
方法です
コメントで処理するとは、単に属性をレコードに割り当てることを意味します。
だからここに私のclose_open_orders!
方法の始まりです
each
しかし、私が言ったように、このメソッドを無視するとデッドロックが発生するため、問題はステートメントにあるとは思いません。
そして、1 つのメソッドのみが実行されている場合、すべてが正常に機能します。pg ログを添付することもできますが、デッドロックは見られません。更新の注文が 2 つ選択されています。選択するよりも、user.orders.open.where.not(id: order.id)
それだけです。その後は関係ありません(または関係ありませんか?):
必要に応じて、さらに pg ログを追加できます。
UPD sidekiqを使用してジョブを非同期に実行しています
transactional - Spring @Transactional 使用中の PessimisticLockException
6 つのテーブルのフィールドを変更する必要があり、単一のトランザクションでそれを行う必要があります。
そこで、Spring @Transactional (デフォルト設定) を使用しました。
ここで、トランザクション メソッド内でデータをフェッチおよび更新しているときに、他の呼び出しがテーブル (イベント) の 1 つにアクセスしようとすると、イベント テーブルがロックされている可能性があるためにアプリケーションがハングし、アプリケーション ログにjavax.persistence.PessimisticLockExceptionが記録されます。 .
私が望むのは、@Transactionalメソッドを実行している間、アプリケーションはデータベースに対して行われたすべての読み取り要求を処理し、ロックのためにハングしないようにすることです。
注: ダービー データベースを組み込みモードで使用しています。MySqlで問題なく動作しています。
助けてください。
ありがとう。
symfony - Doctrine isLocked メソッド
エンティティが doctrine でロックされているかどうかを確認する方法はありますか?
私の場合、論理エラーを防ぐために、関連するエンティティが現在のトランザクションでロックされているかどうかを EventListener から知る必要があります。
このようなものは素晴らしいでしょう:
追加のベンダーの使用は避けたいと思います。